Расширение разметки ComponentResourceKey
Определяет и ссылается на ключи для ресурсов, загруженных из внешних сборок. Это позволяет поиску ресурсов указать целевой тип в сборке, а не явный словарь ресурсов в сборке или классе.
Использование атрибутов XAML (настройка ключа, компактное)
<object x:Key="{ComponentResourceKey {x:Type targetTypeName}, targetID}" ... />
Использование атрибутов XAML (ключевой параметр, подробные сведения)
<object x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type targetTypeName}, ResourceID=targetID}" ... />
Использование атрибутов XAML (запрос ресурса, компактный)
<object property="{DynamicResource {ComponentResourceKey {x:Type targetTypeName}, targetID}}" ... />
Использование атрибутов XAML (запрос ресурса, подробное описание)
<object property="{DynamicResource {ComponentResourceKey TypeInTargetAssembly={x:Type targetTypeName}, ResourceID=targetID}}" ... />
Значения XAML
Ценность | Описание |
---|---|
targetTypeName |
Имя типа общеязыковой исполняющей среды (CLR), который определен в сборке ресурсов. |
targetID |
Ключ ресурса. При поиске ресурсов targetID будет аналогичен директиве x:Key ресурса. |
Замечания
Как показано в приведенных выше использовании, использование расширения разметки {ComponentResourceKey
} находится в двух местах:
Определение ключа в словаре ресурсов темы, предоставленное автором элемента управления.
Доступ к ресурсу темы из сборки, когда вы изменяете шаблон элемента управления, но хотите использовать значения свойств из ресурсов, предоставленных темами элемента управления.
Для ссылок на ресурсы компонентов, поступающие из тем, обычно рекомендуется использовать {DynamicResource}
, а не {StaticResource}
. Это показано в примерах использования.
{DynamicResource}
рекомендуется, так как сама тема может быть изменена пользователем. Если вы хотите, чтобы ресурс компонента наиболее точно соответствовал намерению автора управления для поддержки темы, также убедитесь, что ссылка на ресурс вашего компонента является динамической.
TypeInTargetAssembly определяет тип, который существует в целевой сборке, в которой фактически определен ресурс.
ComponentResourceKey
можно определить и использовать независимо от того, где определена TypeInTargetAssembly, но в конечном итоге необходимо разрешить тип с помощью ссылочных сборок.
Обычное использование ComponentResourceKey заключается в определении ключей, которые затем выступают в качестве членов класса. Для этого использования используется конструктор класса ComponentResourceKey, а не расширение разметки. Дополнительные сведения см. в разделе ComponentResourceKeyили в разделе "Определение и использование ключей для ресурсов темы" в теме Обзор создания элементов управления.
Для установки ключей и ссылок на ключевые ресурсы синтаксис атрибута обычно используется для расширения разметки ComponentResourceKey
.
Показанный компактный синтаксис зависит от подписи конструктора ComponentResourceKey и использования позиционных параметров расширения разметки. Порядок предоставления targetTypeName
и targetID
имеет важное значение. Подробный синтаксис использует конструктор без параметров ComponentResourceKey, а затем задает TypeInTargetAssembly и ResourceId так, что он аналогичен синтаксису настоящего атрибута для элемента объекта. В подробном синтаксисе порядок задания свойств не важен. Связь и механизмы этих двух альтернативных вариантов (компактные и подробные) подробно описаны в разделе расширения разметки иXAML WPF.
Технически значение для targetID
может быть любым объектом, оно не должно быть строкой. Однако наиболее распространенное использование в WPF заключается в выравнивании значения targetID
с формами, которые являются строками, и где такие строки допустимы в грамматике XamlName.
ComponentResourceKey
можно использовать в синтаксисе элемента объекта. В этом случае для правильной инициализации расширения необходимо указать значение как TypeInTargetAssembly, так и ResourceId свойств.
В реализации средства чтения XAML WPF обработка этого расширения разметки определяется классом ComponentResourceKey.
ComponentResourceKey
— это расширение разметки. Расширения разметки обычно реализуются, если существует требование обрабатывать значения атрибутов, отличные от литеральных значений или имен обработчиков, и это требование является более общим, чем просто использование преобразователей типов для определённых типов или свойств. Все расширения разметки в XAML используют символы { и } в синтаксисе атрибутов, что является соглашением, с помощью которого обработчик XAML распознает, что расширение разметки должно обрабатывать атрибут. Дополнительные сведения см. в разделе Расширения разметки и WPF XAML.
См. также
- ComponentResourceKey
- ControlTemplate
- Обзор создания элементов управления
- XAML в WPF
- расширения разметки и XAML WPF
.NET Desktop feedback