Поделиться через


Расширение разметки ThemeDictionary

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

Использование атрибута XAML

<object property="{ThemeDictionary assemblyUri}" ... />  

Использование элемента объекта XAML

<object>  
  <object.property>  
    <ThemeDictionary AssemblyName="assemblyUri"/>  
  <object.property>  
<object>  

Значения XAML

Стоимость Description
assemblyUri Универсальный код ресурса (URI) сборки, содержащей сведения о теме. Как правило, это URI типа pack, который ссылается на сборку в большом пакете. Ресурсы сборки и URI типа pack упрощают развертывание. Дополнительные сведения см. в разделе URI типа pack в WPF.

Замечания

Это расширение предназначено для заполнения только одного значения конкретного свойства — ResourceDictionary.Source.

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

Строка assemblyUri (значение свойства AssemblyName) служит основой для соглашения об именовании, которое определяет, какой словарь применяется для конкретной темы. Логика ProvideValue для ThemeDictionary реализует это соглашение путем создания универсального кода ресурса (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 используют символы { и } в синтаксисе их атрибутов, который является соглашением, по которому обработчик XAML узнает, что расширение разметки должно обработать атрибут. Дополнительные сведения см. в разделе Расширения разметки и XAML WPF.

См. также