Voici mon approche-
Dans votre App.xaml vous voulez déclarer un élément
MergedDictionaries
comme celui-ci ..
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Styles\Colors.xaml" />
<ResourceDictionary Source="Styles\Brushes.xaml" />
<ResourceDictionary Source="Styles\Typeography.xaml" />
<ResourceDictionary Source="Styles\ModuleAStyles.xaml />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Comme vous pouvez le voir, je tendance à avoir quelques fichiers séparés ici pour les couleurs (couleurs si vous l'épelez correctement), pinceaux, typographie et puis généralement utiliser un supplémentaire pour chaque module. Si vous en utilisez plus d'un s'il s'agit d'une application volumineuse, vous risquez d'avoir trop de choses dans un fichier et cela devient rapidement difficile à maintenir. Vous devrez juste utiliser votre meilleur jugement ici et voir ce qui vous convient le mieux.
Dans le Typeography.xaml que je fais référence dans ce dictionnaire fusionné j'ai déclaré un style appelé ApplicationTitle comme ça ...
<!--Application Title-->
<Style TargetType="{x:Type TextBlock}"
x:Key="ApplicationTitle">
<Setter Property="VerticalAlignment"
Value="Center" />
<Setter Property="HorizontalAlignment"
Value="Center" />
<Setter Property="FontFamily"
Value="Georgia" />
<Setter Property="Foreground"
Value="{StaticResource ResourceKey=FlatGradientLightest}" />
<Setter Property="FontSize"
Value="24" />
<Setter Property="Effect">
<Setter.Value>
<DropShadowEffect BlurRadius="5"
Color="#333"
Opacity=".3" />
</Setter.Value>
</Setter>
</Style>
Vous remarquerez que dans ce style, je fais référence à nouveau une autre ressource appelée 'FlatGradientLightest' utilisant l'extension de balisage StaticResource
. Cette ressource existe dans le fichier Brushes.xaml ...
<!--Flat Diagonal Gradient Lightest-->
<LinearGradientBrush x:Key="FlatDiagonalGradientLightest"
StartPoint="0,0"
EndPoint="1,1">
<GradientStop Color="{StaticResource ResourceKey=Light}"
Offset="0" />
<GradientStop Color="{StaticResource ResourceKey=Lightest}"
Offset="1" />
</LinearGradientBrush>
Et encore une fois cette référence aux couleurs « Light » et « léger ». Ceux-ci existent dans le fichier Colors.xaml ...
<Color x:Key="Light"
A="255"
R="190"
G="190"
B="190" />
<Color x:Key="Lightest"
A="255"
R="250"
G="250"
B="250" />
Ce qui est important ici est l'ordre que je spécifié les dictionnaires de ressources dans App.xaml. Si je devais déplacer Typeography.xaml en haut de la liste, cela provoquerait une exécution car au moment où il chargeait ce style, ses dépendances n'existeraient pas. Comme WPF/SL regarde vers le haut pour résoudre les ressources (comme Muad'Dib) l'a signalé, vous pouvez simplement utiliser ces ressources dans vos modules comme si elles étaient déclarées localement. Donc dans un de mes modules, j'ai un TextBlock
déclaré comme ça ...
<TextBlock Text="Menu Module Loaded" Style="{StaticResource ResourceKey=ApplicationTitle}" />
Ce TextBlock
utilise maintenant le style « ApplicationTitle » dans Typeography.xaml, qui charge son Foreground
brosse de la « FlatGradientLightest » LinearGradientBrush
dans Brushes.xaml, qui se charge à son tour deux couleurs de Color
ressources dans les couleurs. fichier xaml.
Un peu cool non?
Espérons que ça aide.
Silverlight 3 prend directement en charge les applications du navigateur –