Расширение разметки ComponentResourceKeyComponentResourceKey Markup Extension

Определяет и ссылается на ключи для ресурсов, загружаемых из внешних сборок.Defines and references keys for resources that are loaded from external assemblies. Это позволяет подстановке ресурсов указывать целевой тип в сборке, а не явный словарь ресурсов в сборке или классе.This enables a resource lookup to specify a target type in an assembly, rather than an explicit resource dictionary in an assembly or on a class.

Использование атрибута XAML (ключ Setting, компактный)XAML Attribute Usage (setting key, compact)

<object x:Key="{ComponentResourceKey {x:Type targetTypeName}, targetID}" .../>  

Использование атрибута XAML (параметр key, verbose)XAML Attribute Usage (setting key, verbose)

<object x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type targetTypeName}, ResourceID=targetID}" .../>  

Использование атрибута XAML (запрос ресурса, компактный)XAML Attribute Usage (requesting resource, compact)

<object property="{DynamicResource {ComponentResourceKey {x:Type targetTypeName}, targetID}}" .../>  

Использование атрибута XAML (запрос ресурса, подробный)XAML Attribute Usage (requesting resource, verbose)

<object property="{DynamicResource {ComponentResourceKey TypeInTargetAssembly={x:Type targetTypeName}, ResourceID=targetID}}" .../>  

Значения XAMLXAML Values

targetTypeName Имя общедоступного типа общеязыковой среды выполнения (CLR), определенного в сборке ресурсов.The name of the public common language runtime (CLR) type that is defined in the resource assembly.
targetID Ключ для ресурса.The key for the resource. При поиске targetID ресурсов они будут аналогом директивы x:Key ресурса.When resources are looked up, targetID will be analogous to the x:Key Directive of the resource.

ПримечанияRemarks

Как показано в описании выше, использование расширения разметки {ComponentResourceKey} находится в двух местах:As seen in the usages above, a {ComponentResourceKey} markup extension usage is found in two places:

  • Определение ключа в словаре ресурсов темы, предоставленное автором элемента управления.The definition of a key within a theme resource dictionary, as provided by a control author.

  • Доступ к ресурсу темы из сборки при пересоздании шаблона элемента управления, но необходимо использовать значения свойств, полученные из ресурсов, предоставляемых темами элемента управления.Accessing a theme resource from the assembly, when you are retemplating the control but want to use property values that come from resources provided by the control's themes.

Для ссылок на ресурсы компонентов, которые поступают из тем, обычно рекомендуется использовать {DynamicResource} {StaticResource}вместо.For referencing component resources that come from themes, it is generally recommended that you use {DynamicResource} rather than {StaticResource}. Это показано в использовании.This is shown in the usages. {DynamicResource}рекомендуется, поскольку пользователь может изменить саму тему.{DynamicResource} is recommended because the theme itself can be changed by the user. Если требуется, чтобы ресурс компонента, наиболее точно соответствующий намерению разработчика элемента управления, поддерживал тему, следует включить также динамическую ссылку на ресурс компонента.If you want the component resource that most closely matches the control author's intent for supporting a theme, you should enable your component resource reference to be dynamic also.

TypeInTargetAssembly Определяет тип, существующий в целевой сборке, в которой ресурс фактически определен.The TypeInTargetAssembly identifies a type that exists in the target assembly where the resource is actually defined. Можно определить и использовать независимо от того, TypeInTargetAssembly где определено, но в конечном итоге необходимо разрешить тип с помощью сборок, на которые имеются ссылки. ComponentResourceKeyA ComponentResourceKey can be defined and used independently of knowing exactly where the TypeInTargetAssembly is defined, but eventually must resolve the type through referenced assemblies.

Распространенный способ использования ComponentResourceKey — определение ключей, которые затем предоставляются как члены класса.A common usage for ComponentResourceKey is to define keys that are then exposed as members of a class. Для такого использования используется ComponentResourceKey конструктор класса, а не расширение разметки.For this usage, you use the ComponentResourceKey class constructor, not the markup extension. Дополнительные сведения см ComponentResourceKey. в разделе или «определение и создание ссылок на ключи для ресурсов темы» раздела Общие сведения о разработке элементов управленияраздела.For more information, see ComponentResourceKey, or the "Defining and Referencing Keys for Theme Resources" section of the topic Control Authoring Overview.

Для установки ключей и ссылок на ресурсы с ключом синтаксис атрибутов обычно используется для ComponentResourceKey расширения разметки.For both establishing keys and referencing keyed resources, attribute syntax is commonly used for the ComponentResourceKey markup extension.

Синтаксис Compact, показанный в, зависит ComponentResourceKey.ComponentResourceKey от сигнатуры конструктора и использования позиционированного параметра для расширения разметки.The compact syntax shown relies on the ComponentResourceKey.ComponentResourceKey constructor signature and positional parameter usage of a markup extension. Порядок, в котором targetTypeName задаются и targetID , важен.The order in which the targetTypeName and targetID are given is important. Подробный синтаксис основывается на ComponentResourceKey.ComponentResourceKey конструкторе без параметров, а затем TypeInTargetAssembly устанавливает и ResourceId таким образом, что аналогично истинному синтаксису атрибута для объектного элемента.The verbose syntax relies on the ComponentResourceKey.ComponentResourceKey parameterless constructor, and then sets the TypeInTargetAssembly and ResourceId in a way that is analogous to a true attribute syntax on an object element. В подробном синтаксисе порядок, в котором задаются свойства, не важен.In the verbose syntax, the order in which the properties are set is not important. Отношения и механизмы этих двух вариантов (компактный и подробный) более подробно описаны в разделе расширения разметки и XAML WPF.The relationship and mechanisms of these two alternatives (compact and verbose) is described in more detail in the topic Markup Extensions and WPF XAML.

Технически значением targetID параметра может быть любой объект, а не строковый.Technically, the value for targetID can be any object, it does not have to be a string. Однако наиболее распространенным применением в WPF является согласование targetID значения с формами, которые являются строками, и если такие строки допустимы в грамматике имяxaml.However, the most common usage in WPF is to align the targetID value with forms that are strings, and where such strings are valid in the XamlName Grammar.

ComponentResourceKeyможет использоваться в синтаксисе объектного элемента.ComponentResourceKey can be used in object element syntax. В этом случае для правильной инициализации расширения требуется указать значения TypeInTargetAssembly свойств ResourceId и.In this case, specifying the value of both the TypeInTargetAssembly and ResourceId properties is required to properly initialize the extension.

В реализации модуля чтения Обработка этого ComponentResourceKey расширения разметки определяется классом. XAMLXAML WPFWPFIn the WPFWPF XAMLXAML reader implementation, the handling for this markup extension is defined by the ComponentResourceKey class.

ComponentResourceKey является расширением разметки.ComponentResourceKey is a markup extension. Расширения разметки обычно реализуются, если требуется заменить значения атрибутов на нелитеральные значения или имена обработчиков и если требуется больше, чем простая настройка преобразователей типов на работу с определенными типами или свойствами.Markup extensions are typically implemented when there is a requirement to escape attribute values to be other than literal values or handler names, and the requirement is more global than just putting type converters on certain types or properties. Все расширения разметки в XAMLXAML используют символы "{" и "}" в синтаксисе их атрибутов, который является соглашением, по которому обработчик XAMLXAML распознает, что расширение разметки должно обработать атрибут.All markup extensions in XAMLXAML use the { and } characters in their attribute syntax, which is the convention by which a XAMLXAML processor recognizes that a markup extension must process the attribute. Дополнительные сведения см. в разделе Расширения разметки и XAML WPF.For more information, see Markup Extensions and WPF XAML.

См. такжеSee also