Почему ресурсы XAML отличаются от стилей CSS? - PullRequest
4 голосов
/ 07 февраля 2009

В Expression Blend вы можете создать размер шрифта, скажем, 18, а затем создать «ресурс размера шрифта».

Исходя из этого из HTML / CSS, я не могу представить, когда мне захочется создать стиль для «font-size» и один для «font-style», а другой для «font-weight». Вместо этого я хочу создать шрифт с названием «CompanyHeader» и установить в нем 10 различных атрибутов, например, Вес шрифта, стиль шрифта, размер шрифта, цвет и т. д.

Почему это отличается в Expression Blend, XAML, в чем смысл создания стиля / ресурса для каждого атрибута?

на этом рисунке показано, как вы можете нажать маленькую кнопку на каждом атрибуте, чтобы превратить его в ресурс: альтернативный текст http://tanguay.info/web/external/blendStyles.png

Ответы [ 5 ]

10 голосов
/ 08 февраля 2009

У меня нет опыта работы с Blend, но стили в XAML могут включать более одного атрибута, более того, поскольку в отличие от CSS вы можете применять только один стиль к элементу, который не может объединять несколько стилей с одним атрибутом.

Вот пример стиля, который устанавливает несколько свойств:

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
   <Page.Resources>
      <Style x:Key="MyStyle" TargetType="{x:Type Label}">
         <Setter Property="Width" Value="125"/>
         <Setter Property="Height" Value="25"/>
         <Setter Property="Background" Value="Red"/>
      </Style>
   </Page.Resources>
   <Label Style="{StaticResource MyStyle}"/>
</Page>

Обратите внимание, что если бы я захотел разбить стиль на 3 меньших стиля, каждый из которых устанавливал одно свойство, я бы не смог их использовать, поскольку свойство Label's Style может принимать только один стиль.

4 голосов
/ 07 февраля 2009

Я думаю, что они, вероятно, позволяют создавать отдельные ресурсы для FontFamily, FontWeight и т. Д., Что позволяет использовать их во многих стилях приложения. Помещая одно свойство в ресурс, вы можете воздействовать на все стили, использующие этот ресурс одновременно. Если вы не использовали ресурс, но пытались использовать непротиворечивую FontFamily для всего своего приложения (или его части), вам пришлось бы просматривать каждый стиль по одному, чтобы обновить его.

Чтобы создать стиль с несколькими свойствами в blend, вы можете сделать следующее:

  • Выберите элемент управления, который вы хотите стилизовать (тип элемента управления будет использоваться как TargetType для стиля)
  • В меню выберите Object-> Edit Style-> Create Empty
  • Введите ключ, который вы хотите присвоить стилю (это имя, которое вы будете использовать для ссылки на стиль)
  • Перейдите на вкладку свойств и начните применять стиль, который вы хотите для этого стиля
3 голосов
/ 07 февраля 2009

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

1 голос
/ 03 июня 2010

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

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

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

На ваш вопрос о Blend это просто применяет эту лучшую практику.

0 голосов
/ 04 октября 2012

Это возможно, создав вспомогательный класс для использования и переноса ваших стилей. Упомянутый CompoundStyle здесь показывает, как это сделать. Есть несколько способов, но проще всего сделать следующее:

<TextBlock Text="Test"
    local:CompoundStyle.StyleKeys="headerStyle,textForMessageStyle,centeredStyle"/>

В блоге рассказывается о Win8 и Windows Phone, но тот же код работает и для WPF (за исключением ненужного класса Utilies)

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

...