2009-09-20 2 views
2

Мы смотрим на запуск нового проекта Silverlight с использованием инфраструктуры PRISM (чтобы извлечь выгоду из модулей и т. Д.), И я все еще немного неясен в отношении наилучшего стиля. В идеале мне хотелось бы иметь редактируемые файлы XAML (может быть, даже один для всего проекта), содержащий стиль приложения, чтобы их можно было редактировать, чтобы изменить внешний вид приложения без необходимости перекомпилировать все. Этот подход используется людьми? Я предполагаю, что ему нужно будет загрузить файл при запуске и применить стиль, который, как я полагаю, не будет большим накладным.Silverlight PRISM и «свободные» файлы стиля

Просто интересно, какие подходы люди используют

Спасибо за ваше время

+0

Silverlight 3 напрямую поддерживает браузеры –

ответ

2

В Silverlight (и WPF) типичный/нормальный подход должен держать свои стили и кисти в Словаре ресурсов. они могут быть заменены, чтобы изменить макет, цвета и шаблоны управления в любое время. Вы можете включить их в XAP, который создается при создании приложения или в автономной сборке.

Следует помнить, что файлы ресурсов могут загружаться на разных уровнях. Уровень приложения до уровня отдельных элементов управления. словари, загруженные на нижнем уровне, будут иметь приоритет над более высоким уровнем. Для меня это помогает думать об этом как о слоях.

2

Вот мой приближаясь

В вашем 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> 

Как вы можете видеть, я, как правило, имеет несколько отдельных файлов здесь для цветов (цвета, если вы правильно написали), кисти, типография, а затем I обычно используйте один дополнительный для каждого модуля. Используйте более одного, если это большое приложение, иначе у вас будет слишком много материала в одном файле, и его будет сложно поддерживать. Вам просто нужно использовать ваше лучшее суждение здесь и посмотреть, что подходит вам лучше всего.

В 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> 

И снова это ссылки Цвета «Light» и «легкий». Они существуют в файле 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 ресурсов в цветах. xaml-файл.

Kinda cool right?

Надеюсь, что это поможет.