Normalerweise erstelle ich ein separates Styling-Projekt, das ich von den Projekten referenziere, die ich stylen möchte. Das Styling-Projekt hat eine feste Struktur wie folgt aus:
Für jede Kontrolle, erstelle ich ein Styling ResourceDictionary
. Zum Beispiel für meine Knöpfe:
<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>
In einem Haupt ResourceDictionary
, fusionieren ich alle anderen Wörterbüchern, in diesem Fall in der Datei IncaDesign.xaml, die Sie im Bild oben sehen können:
<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>
Beachten Sie, wie ich die Standardstile definiert habe, die automatisch angewendet werden, sofern Sie nichts anderes angeben. In jedem Fenster oder Steuerelement, das Sie stylen möchten, müssen Sie nur auf dieses ResourceDictionary
verweisen. Beachten Sie die Definition der Quelle, die einen Verweis auf die Baugruppe (/Commons.Styling;component...
)
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Commons.Styling;component/IncaDesign.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
Standardstile wird nun automatisch eingestellt werden, und wenn Sie eine Ressource explizit zugreifen möchten, können Sie dies tun, StaticResource
verwenden.
<Viewbox Height="16" Width="16" Margin="0,0,10,0">
<ContentControl Content="{StaticResource FileIcon32}" />
</Viewbox>
Dies ist sehr schöne Lösung meiner Meinung nach, die für sehr komplexe Lösungen arbeiten, auch modulare Lösungen, zum Beispiel mit PRISM gebaut.
Sie können ein ResourceDictionary erstellen und es zu einer ClassLibrary hinzufügen. Sie müssen auf Ihre App.xaml verweisen und Sie können die Bibliothek in vielen Projekten verwenden. –