Почему ресурсы XAML отличаются от стилей CSS?

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

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

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

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


person Edward Tanguay    schedule 07.02.2009    source источник


Ответы (5)


У меня нет опыта работы с 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 меньших стиля, каждый из которых устанавливал бы одно свойство, я бы не смог их использовать, потому что свойство «Стиль метки» может принимать только один стиль.

person Nir    schedule 08.02.2009
comment
Но вы можете разделить стиль на 3 StaticResource и ссылаться на них в MyStyle и повторно использовать их в другом месте ... - person Gordon Mackie JoanMiro; 25.03.2009

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

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

  • Выберите элемент управления, который вы хотите стилизовать (тип элемента управления будет использоваться как TargetType для стиля)
  • В меню выберите Object-> Edit Style-> Create Empty.
  • Введите ключ, который вы хотите назначить стилю (это имя, которое вы будете использовать для ссылки на стиль)
  • Перейдите на вкладку свойств и начните применять внешний вид, который вы хотите для этого стиля.
person Richard McGuire    schedule 07.02.2009

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

person Phil Wright    schedule 07.02.2009

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

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

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

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

person vplusplus    schedule 03.06.2010

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

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

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

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

person Shahar Prish    schedule 04.10.2012