Zazwyczaj tworzę osobny projekt stylizacji, który odwołuję się do projektów, które chcę stylizować. Projekt stylizacji ma stałą strukturę takiego:
dla każdej kontroli, tworzę stylizacji ResourceDictionary
. Na przykład dla moich przycisków:
<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>
w jednym głównym ResourceDictionary
, mogę połączyć wszystkie inne słowniki, w tym przypadku w pliku IncaDesign.xaml, co można zobaczyć na zdjęciu powyżej:
<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>
Zwróć uwagę, jak zdefiniowałem style domyślne, które są stosowane automatycznie, chyba że określisz inaczej. W każdym oknie lub sterowaniu, które chcesz nadać styl, wystarczy odwołać się do tego ResourceDictionary
. Należy zwrócić uwagę na definicję źródła, co jest nawiązaniem do montażu (/Commons.Styling;component...
)
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Commons.Styling;component/IncaDesign.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
style domyślne zostaną ustawione automatycznie teraz, a jeśli chcesz uzyskać dostęp do zasobu wyraźnie, można to zrobić za pomocą StaticResource
.
<Viewbox Height="16" Width="16" Margin="0,0,10,0">
<ContentControl Content="{StaticResource FileIcon32}" />
</Viewbox>
Jest to bardzo miłe rozwiązanie moim zdaniem, która pracuje dla bardzo skomplikowanych rozwiązań, w tym rozwiązań modułowych, na przykład zbudowany z PRISM.
Możesz utworzyć ResourceDictionary i dodać go do biblioteki ClassLibrary. Musisz odwoływać się do niego w App.xaml i możesz korzystać z Biblioteki w wielu projektach. –