ПРИЗМА Silverlight и «свободные» файлы стилей - PullRequest
2 голосов
/ 20 сентября 2009

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

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

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

Ответы [ 2 ]

2 голосов
/ 08 сентября 2010

Вот мой подход-

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

Вроде круто, верно?

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

2 голосов
/ 20 сентября 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...