私は通常、別のスタイリングプロジェクトを作成します。これは、スタイリングしたいプロジェクトから参照します。スタイリングプロジェクトの構造は次のように固定されています。
すべてのコントロールに対して、スタイリングを作成しますResourceDictionary
。たとえば、私のボタンの場合:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="PrimaryButtonStyle" TargetType="Button">
</Style>
<Style x:Key="ToolbarButton" TargetType="Button">
<Setter Property="BorderThickness" Value="0" />
<Setter Property="Margin" Value="3"/>
<Setter Property="Background" Value="Transparent"></Setter>
</Style>
</ResourceDictionary>
1つのメインResourceDictionary
で、他のすべての辞書をマージします。この場合は、ファイルIncaDesign.xamlにマージします。これは、上の図で確認できます。
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:Commons.Controls;assembly=Commons">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Converter/Converter.xaml" />
<ResourceDictionary Source="Styles/Button.xaml" />
<ResourceDictionary Source="BitmapGraphics/Icons.xaml" />
</ResourceDictionary.MergedDictionaries>
<!-- Default Styles -->
<Style TargetType="Button" BasedOn="{StaticResource PrimaryButtonStyle}"></Style>
</ResourceDictionary>
特に指定しない限り、自動的に適用されるデフォルトのスタイルをどのように定義したかに注意してください。スタイリングするすべてのウィンドウまたはコントロールで、これを参照するだけで済みますResourceDictionary
。アセンブリへの参照であるソースの定義に注意してください(/Commons.Styling;component...
)
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Commons.Styling;component/IncaDesign.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
デフォルトのスタイルが自動的に設定されるようになりました。リソースに明示的にアクセスする場合は、を使用してこれを行うことができますStaticResource
。
<Viewbox Height="16" Width="16" Margin="0,0,10,0">
<ContentControl Content="{StaticResource FileIcon32}" />
</Viewbox>
これは私の意見では非常に優れたソリューションであり、たとえばPRISMで構築されたモジュラーソリューションを含む非常に複雑なソリューションで機能します。