Расширение разметки ThemeDictionary
Предоставляет для авторов пользовательского элемента управления или приложений, которые объединяют элементы управления сторонних производителей, способ загрузки определенных темой словарей ресурсов для использования в стилизации элемента управления.
Использование атрибута XAML
<object property="{ThemeDictionary assemblyUri}" .../>
Использование элемента объекта XAML
<object>
<object.property>
<ThemeDictionary AssemblyName="assemblyUri"/>
<object.property>
<object>
Значения XAML
assemblyUri |
Сборка uniform resource identifier (URI), содержащая сведения темы. Как правило, это пакет URI, который ссылается на сборку в большом пакете. Сборка ресурсов и пакет URI упрощают развертывание. Дополнительные сведения см. в разделе URI типа "pack" в WPF. |
Заметки
Это расширение предназначено для заполнения только одного значения конкретного свойства: ResourceDictionary.Source.
Используя это расширение, можно указать одну сборку ресурсов, содержащую некоторые стили для использования только при применении к пользовательской системе темы Windows Aero, другие стили при активной теме Luna и т. д. Используя это расширение, при необходимости содержимое словаря ресурсов элемента управления можно автоматически считать недействительным и перезагрузить для другой темы.
Строка assemblyUri (значение свойства AssemblyName) удовлетворяет основе соглашения об именовании, определяющей, какой словарь применяется для конкретной темы. Логика ProvideValue для ThemeDictionary завершает соглашение, создавая uniform resource identifier (URI), который указывает на тип словаря конкретной темы, как содержащийся внутри предварительно откомпилированной сборки ресурсов. Описание этого соглашения или взаимодействия темы со стилизацией основных элементов управления и стилизацией уровня страницы или приложения, как концепции, полностью в данном разделе не рассматривается. Основным скриптом использования ThemeDictionary является указание свойства Source из ResourceDictionary, объявленного на уровне приложения. При обеспечении URI для сборки через расширение ThemeDictionary, вместо непосредственного URI, логика расширения обеспечит логику недостоверности, которая применяется при каждом изменении системной темы.
Синтаксис атрибута является наиболее распространенным синтаксисом, который используется с этим расширением разметки. маркер строки, указанный после идентификатора строки ThemeDictionary, получает значение AssemblyName базового класса расширения ThemeDictionaryExtension.
Ключевое слово ThemeDictionary также можно использовать в синтаксисе элемента объекта. В этом случае указание значения свойства AssemblyName является обязательным.
Излишним может оказаться использование ThemeDictionary в атрибуте, в котором свойство Member определено как пара «свойство=значение».
<object property="{ThemeDictionary AssemblyName=assemblyUri}" .../>
Подробное определение зачастую удобно использовать для расширений, которые имеют несколько устанавливаемых свойств, а также в том случае, если некоторые свойства являются необязательными. Поскольку ThemeDictionary имеет только одно устанавливаемое свойство, которое является обязательным, это использование не является типичным.
В реализации процессора XAML WPF обработка данного расширения разметки определяется классом ThemeDictionaryExtension.
ThemeDictionary является расширением разметки. Расширения разметки обычно реализуются, если требуется заменить значения атрибутов на нелитеральные значения или имена обработчиков и если требуется не только простая настройка преобразователей типов на работу с определенными типами или свойствами. Все расширения разметки в XAML используют символы { and } в синтаксисе их атрибутов, который является соглашением, по которому процессор XAML распознает, что расширение разметки должно обработать атрибут. Дополнительные сведения см. в разделе Расширения разметки и XAML WPF.
См. также
Основные понятия
Стилизация и использование шаблонов
Общие сведения о языке XAML (WPF)