Главная » WPF » Наследование стилей

0

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

Для каждого свойства в WPF определено  понятие приоритета  значений  (рис.

8.4). Все, что мы видели до сих пор, – стили, привязка к данным, наследование  и прочее – применяется в строго определенном порядке.  Интересно отметить, что к любому  элементу  на самом деле применяется два стиля.  При  использовании элемента  управления создается  впечатление,  что стиль  только  один, поскольку второй зарезервирован для автора элемента. В любом случае локальные значения свойств имеют приоритет  по отношению  к определенным в стиле.

Помимо  элементарной расстановки приоритетов,  имеется  еще возможность создать базовый стиль, которому могут наследовать другие стили. У каждого сти ля может быть только один родитель (специально для любителей  C++ – множе ственного  наследования нет), зато один и тот же базовый  стиль может служить родителем  для нескольких  стилей потомков. С учетом иерархии  стилей  рис. 8.4 превращается в рис. 8.5.

Пусть нужно создать базовый стиль, который будет применяться ко всем эле ментов  управления и содержать  некоторые  общие свойства  шрифта.  Для  этого определим  стиль, указав в качестве целевого общий базовый тип, в котором уже есть все свойства, подлежащие  настройке, и зададим для него имя:

<Style x:Key=’baseControls’ TargetType=’{x:Type Control}’>

<Setter Property=’FontSize’ Value=’14pt’ />

<Setter Property=’FontFamily’ Value=’Corbel, Arial’ />

<Setter Property=’Margin’ Value=’2’ />

</Style>

Теперь этот базовый тип можно ассоциировать с различными типами элемен

тов управления, пользуясь  стандартным  тегом Style и его свойством BasedOn5:

<Style

x:Key=’{x:Type TextBox}’ TargetType=’{x:Type TextBox}’ BasedOn=’{StaticResource baseControls}’ />

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

<Window x:Class=’Styles.StyleInheritence’ xmlns=’http://schemas.microsoft.com/winfx/2006/xaml/presentation’ xmlns:x=’http://schemas.microsoft.com/winfx/2006/xaml’ Title=’Styles’

<Window.Resources>

5  Обратите внимание на использование ключевого слова StaticResource в приведенном ниже фрагменте. Поскольку сам объект Style не пользуется системой зависимых свойств, то для за% дания его свойств мы не можем прибегнуть к связыванию, стилизации или динамическим ре% сурсам. Слово StaticResource позволяет применить ресурс ровно один раз, а недостаток тако% го решения состоит в том, что свойство BasedOn стиля не обновляется при модификации сло% варя ResourceDictionary.

<Style x:Key=’baseControls’ TargetType=’{x:Type Control}’>

<Setter Property=’FontSize’ Value=’14pt’ />

<Setter Property=’FontFamily’ Value=’Corbel, Arial’ />

<Setter Property=’Margin’ Value=’2’ />

</Style>

<Style

x:Key=’{x:Type Button}’ TargetType=’{x:Type Button}’ BasedOn=’{StaticResource baseControls}’>

<Setter Property=’FontWeight’ Value=’Bold’ />

</Style>

<Style

x:Key=’{x:Type CheckBox}’ TargetType=’{x:Type CheckBox}’ BasedOn=’{StaticResource baseControls}’ />

<Style

x:Key=’{x:Type TextBox}’ TargetType=’{x:Type TextBox}’ BasedOn=’{StaticResource baseControls}’ />

</Window.Resources>

<StackPanel>

<CheckBox>Hello World</CheckBox>

<TextBox>Hello World</TextBox>

<Button>Hello World</Button>

<Button>Hello World</Button>

</StackPanel>

</Window>

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

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

Источник: К. Андерсон  Основы  Windows Presentation Foundation. Пер. с англ. А. Слинкина — М.: ДМК Пресс, 2008 — 432 с.: ил.

По теме:

  • Комментарии