Вот мой подход-
В вашем App.xaml вы захотите объявить MergedDictionaries
элемент, подобный этому.
<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>
Как вы видите, у меня, как правило, есть несколько отдельных файлов для цветов (цветов, если вы пишете это правильно), кистей, типографики, а затем я обычно использую один дополнительный для каждого модуля. Используйте более одного, если это большое приложение, иначе у вас будет слишком много материала в одном файле, и его быстро будет сложно поддерживать. Вы просто должны будете прислушаться к своему мнению и посмотреть, что вам больше подходит.
В Typeography.xaml, на который я ссылаюсь в этом объединенном словаре, я объявил стиль под названием ApplicationTitle, подобный этому ...
<!--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>
Вы заметите, что в этом стиле я снова ссылаюсь на другой ресурс под названием FlatGradientLightest, используя расширение разметки StaticResource
. Этот ресурс существует в файле 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>
И снова это относится к цветам «Свет» и «Самый светлый». Они существуют в файле 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" />
Здесь важен порядок, в котором я указывал словари ресурсов в App.xaml. Если бы я переместил Typeography.xaml в начало списка, это вызвало бы время выполнения, поскольку во время загрузки этого стиля его зависимости не существовали.
Поскольку WPF / SL смотрит вверх для разрешения ресурсов (как указал Muad'Dib), вы можете просто использовать эти ресурсы в своих модулях, как если бы они были объявлены локально. Итак, в одном из моих модулей у меня есть TextBlock
, объявленный так ...
<TextBlock Text="Menu Module Loaded" Style="{StaticResource ResourceKey=ApplicationTitle}" />
То, что TextBlock
теперь использует стиль «ApplicationTitle» в Typeography.xaml, который загружает кисть Foreground
из «FlatGradientLightest» LinearGradientBrush
в Brushes.xaml, которая, в свою очередь, загружает два цвета из Color
ресурсов. в файле Colours.xaml.
Вроде круто, верно?
Надеюсь, это поможет.