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


Расширение разметки 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

Имя открытого типа common language runtime (CLR), определенного в сборке ресурсов.

targetID

Ключ ресурса. При поиске ресурсов код targetID будет аналогом атрибута Директива x:Key ресурса.

Заметки

Как показано выше, расширение разметки {ComponentResourceKey} находится в двух местах:

  • Определения ключа в словаре ресурсов тем, предоставляемое автор элемента управления.

  • Обращение к ресурсу темы из сборки при создании нового шаблона элемента управления, если при этом требуется использовать значения свойств из ресурсов, предоставленных темами элемента управления.

Для ссылок на ресурсы компонента, полученные из тем, обычно рекомендуется использовать {DynamicResource} вместо {StaticResource}. Это показано в вариантах применения. {DynamicResource} рекомендуется, поскольку тема сама по себе не может быть изменена пользователем. Если требуется ресурс компонента, который наиболее точно соответствует цели автора элемента управления для поддержки темы, следует включить ссылку на ресурс компонента, чтобы он также был динамическим.

Класс TypeInTargetAssembly определяет тип, существующий в целевой сборке, в которой фактически определен ресурс. Расширение ComponentResourceKey может быть определено и использовано независимо от того, где определена сборка TypeInTargetAssembly, но со временем оно должен распознать тип через сборки, на которые имеются ссылки.

Типичное использование класса ComponentResourceKey заключается в определении ключей, которые затем представляются как члены класса. Для этой сферы применения следует использовать конструктор класса ComponentResourceKey, а не расширение разметки. Дополнительные сведения см в разделе ComponentResourceKey или в подразделе "Определение и содержащие ссылки ключи для ресурсов тем" раздела Общие сведения о разработке управления.

Для установки ключей и ссылок на ресурсы с ключом синтаксис атрибута обычно используется для расширения разметки ComponentResourceKey.

Приведенный компактный синтаксис основан на сигнатуре конструктора ComponentResourceKey.ComponentResourceKey и использовании позиционных параметров расширения разметки. Порядок, в котором перечислены targetTypeName и targetID, имеет значение. Подробный синтаксис основан на конструкторе по умолчанию ComponentResourceKey.ComponentResourceKey. Затем устанавливаются классы TypeInTargetAssembly и ResourceId способом, который соответствует истинному синтаксису атрибута элемента объекта. В подробном синтаксисе не важен порядок, в котором устанавливаются значения свойств. Связь и механизмы из этих двух вариантов (компактный и подробный синтаксис) описаны более подробно в разделе Расширения разметки и XAML WPF.

С технической точки зрения значением targetID может быть любой объект; это не обязательно должна быть строка. Однако наиболее общим использованием WPF является выравнивание значения targetID с формами, которые представляют собой строки, и случаи, когда такие строки являются допустимыми в Грамматика XamlName.

В синтаксисе элемента объекта может использоваться ComponentResourceKey. В этом случае указание значения свойств TypeInTargetAssembly и ResourceId необходимо для правильной инициализации расширения.

В реализации средства чтения XAML WPF обработка данного расширения разметки определяется классом ComponentResourceKey.

ComponentResourceKey является расширением разметки. Расширения разметки обычно реализуются, если требуется заменить значения атрибутов на нелитеральные значения или имена обработчиков и если требуется не только простая настройка преобразователей типов на работу с определенными типами или свойствами. Все расширения разметки в XAML используют символы { and } в синтаксисе их атрибутов, который является соглашением, по которому процессор XAML распознает, что расширение разметки должно обработать атрибут. Дополнительные сведения см. в разделе Расширения разметки и XAML WPF.

См. также

Ссылки

ComponentResourceKey

ControlTemplate

Основные понятия

Общие сведения о разработке управления

Общие сведения о языке XAML (WPF)

Расширения разметки и XAML WPF