Главная » WPF » Темы

0

При проектировании WPF мы помнили  о темах, однако в основном API ори ентирован  на стили и ресурсы. Единственное место, где в объектной  модели упо минаются  темы,  – это  атрибут  сборки  ThemeInfoAttribute. По  существу  тема представляет собой словарь ресурсов. Вы можете этого и не осознавать, но с этим типом мы уже сталкивались. Классу  ResourceDictionary принадлежат все свой ства Resources, которые имеются у элементов  управления, шаблонов и стилей.

Для создания  темы проще всего начать с добавления  в проект нового XAML файла и определения в нем объекта ResourceDictionary (в этом примере мы назо вем файл myTheme.xaml):

<ResourceDictionary xmlns=’http://schemas.microsoft.com/winfx/2006/xaml/presentation’ xmlns:x=’http://schemas.microsoft.com/winfx/2006/xaml’

<Style x:Key=’…’ TargetType=’…’>

</Style>

<ControlTemplate x:Key=’…’ TargetType=’…’>

</ControlTemplate>

<SolidColorBrush x:Key=’…’>

</SolidColorBrush>

</ResourceDictionary>

Этот  новый  стиль  мы  можем  применить   в  любом  месте,  задав  свойство

MergedDictionaries объекта ResourceDictionary:

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

<Window.Resources>

<ResourceDictionary>

<ResourceDictionary.MergedDictionaries>

<ResourceDictionary Source=’myTheme.xaml’ />

</ResourceDictionary.MergedDictionaries>

</ResourceDictionary>

</Window.Resources>

</Window>

При таком употреблении определение  темы включается  в стандартную  схему иерархического поиска ресурсов. Напомним,  что в главе 6 мы говорили,  что по иск   ресурса   производится  сначала   в  дереве   элементов,   затем   в  объекте Application  и наконец  среди системных  ресурсов. Когда словарь  объединяется с деревом, находящиеся в нем ресурсы  становятся доступны  в соответствующем узле. С помощью этой техники мы можем активизировать разные темы для раз ных частей пользовательского интерфейса.

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

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

public class MyCustomControl : FrameworkElement {

public static MyCustomControl() { DefaultStyleKeyProperty.OverrideMetadata(

typeof(MyCustomControl),

new FrameworkPropertyMetadata(typeof(MyCustomControl)));

}

}

Следующий шаг – задать политику  обнаружения темы для сборки с помощью атрибута ThemeInfoAttribute:

[assembly: ThemeInfo( ResourceDictionaryLocation.SourceAssembly, ResourceDictionaryLocation.SourceAssembly)]

Наконец, нужно создать одну или несколько тем для элемента управления. Каждая  тема должна  быть добавлена  в приложение с правильным именем  (см. табл. 8.1) и помечена как страница  в файле проекта (напомним,  что в главе 2 мы включали  в проект компилируемые XAML файлы, задавая для них тип Page).

Тема                                                Цвет                      Имя в словаре ресурсов

Windows XP Style                        Синий                  themes\luna.normalcolor.xaml Оливковый         themes\luna.homestead.xaml Серебристый  themes\luna.metallic.xaml

Windows XP Media Center                                       themes\royale.normalcolor.xaml

Edition;  Windows XP Tablet

PC Edition

Windows Vista Style                                                   themes\aero.normalcolor.xaml

Classic                                                                            themes\classic.xaml

Любая другая (резервный вариант)                       themes\generic.xaml

Таблица 8.1. операционной системы и имена, которые следует использовать в словаре ресурсов

Применяя эту технику, мы можем создать элемент управления, который будет выглядеть по разному  для каждой темы операционной системы. Список тем опе рационной  системы можно расширять.  Microsoft  время от времени добавляет но вые темы (так, в издания  Media Center и Tablet  PC для Windows XP была добав лена тема «royale»),  но способ создания  новых тем третьими  сторонами не опуб ликован3.

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

По теме:

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