Extensión de marcado ComponentResourceKeyComponentResourceKey Markup Extension

Define y hace referencia a las claves de los recursos que se cargan desde ensamblados externos.Defines and references keys for resources that are loaded from external assemblies. Esto permite que una búsqueda de recursos especifique un tipo de destino en un ensamblado, en lugar de un diccionario de recursos explícito en un ensamblado o en una clase.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.

Uso de atributos XAML (clave de configuración, Compact)XAML Attribute Usage (setting key, compact)

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

Uso de atributos XAML (configuración de clave, detallado)XAML Attribute Usage (setting key, verbose)

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

Uso de atributos XAML (recurso de solicitud, Compact)XAML Attribute Usage (requesting resource, compact)

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

Uso de atributos XAML (recurso de solicitud, detallado)XAML Attribute Usage (requesting resource, verbose)

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

Valores XAMLXAML Values

targetTypeName Nombre del tipo de Common Language Runtime público (CLR) que se define en el ensamblado de recursos.The name of the public common language runtime (CLR) type that is defined in the resource assembly.
targetID La clave para el recurso.The key for the resource. Cuando se buscan recursos, targetID será análogo a la Directiva x:Key del recurso.When resources are looked up, targetID will be analogous to the x:Key Directive of the resource.

ComentariosRemarks

Tal como se ha mostrado en los usos anteriores, un uso de la extensión de marcado {ComponentResourceKey} se encuentra en dos lugares:As seen in the usages above, a {ComponentResourceKey} markup extension usage is found in two places:

  • La definición de una clave dentro de un diccionario de recursos de tema, tal y como la proporciona el autor de un control.The definition of a key within a theme resource dictionary, as provided by a control author.

  • Obtener acceso a un recurso de tema desde el ensamblado, cuando se replantilla el control, pero se desea usar valores de propiedad que proceden de los recursos proporcionados por los temas del control.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.

Para hacer referencia a los recursos de componentes que proceden de los temas, generalmente se recomienda usar {DynamicResource} en lugar de {StaticResource}.For referencing component resources that come from themes, it is generally recommended that you use {DynamicResource} rather than {StaticResource}. Esto se muestra en los usos.This is shown in the usages. {DynamicResource} se recomienda porque el usuario puede cambiar el propio tema.{DynamicResource} is recommended because the theme itself can be changed by the user. Si desea que el recurso del componente coincida mejor con la intención del autor del control para admitir un tema, debe permitir que la referencia de recurso del componente también sea dinámica.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.

El TypeInTargetAssembly identifica un tipo que existe en el ensamblado de destino en el que se define realmente el recurso.The TypeInTargetAssembly identifies a type that exists in the target assembly where the resource is actually defined. Un ComponentResourceKey se puede definir y usar independientemente de que sepa exactamente dónde se define el TypeInTargetAssembly, pero finalmente debe resolver el tipo a través de los ensamblados a los que se hace referencia.A ComponentResourceKey can be defined and used independently of knowing exactly where the TypeInTargetAssembly is defined, but eventually must resolve the type through referenced assemblies.

Un uso común de ComponentResourceKey es definir claves que se exponen como miembros de una clase.A common usage for ComponentResourceKey is to define keys that are then exposed as members of a class. Para este uso, se usa el constructor de clase ComponentResourceKey, no la extensión de marcado.For this usage, you use the ComponentResourceKey class constructor, not the markup extension. Para obtener más información, vea ComponentResourceKeyo la sección "definir y hacer referencia a las claves para los recursos del tema" del tema control de creación información general.For more information, see ComponentResourceKey, or the "Defining and Referencing Keys for Theme Resources" section of the topic Control Authoring Overview.

Para establecer claves y hacer referencia a recursos con clave, la sintaxis de atributo se usa normalmente para la extensión de marcado de ComponentResourceKey.For both establishing keys and referencing keyed resources, attribute syntax is commonly used for the ComponentResourceKey markup extension.

La sintaxis compacta que se muestra se basa en el ComponentResourceKey.ComponentResourceKey la firma del constructor y el uso de parámetros posicionales de una extensión de marcado.The compact syntax shown relies on the ComponentResourceKey.ComponentResourceKey constructor signature and positional parameter usage of a markup extension. Es importante el orden en el que se proporcionan el targetTypeName y el targetID.The order in which the targetTypeName and targetID are given is important. La sintaxis detallada se basa en el ComponentResourceKey.ComponentResourceKey constructor sin parámetros y, a continuación, establece el TypeInTargetAssembly y el ResourceId de forma análoga a una sintaxis de atributo verdadera en un elemento de objeto.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. En la sintaxis detallada, el orden en el que se establecen las propiedades no es importante.In the verbose syntax, the order in which the properties are set is not important. La relación y los mecanismos de estas dos alternativas (compacta y detallada) se describen con más detalle en el tema extensiones de marcado y XAML de 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.

Técnicamente, el valor de targetID puede ser cualquier objeto, no tiene que ser una cadena.Technically, the value for targetID can be any object, it does not have to be a string. Sin embargo, el uso más común en WPF es alinear el valor de targetID con formularios que son cadenas, y donde dichas cadenas son válidas en la gramática de XamlName.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 se puede utilizar en la sintaxis de elementos de objeto.ComponentResourceKey can be used in object element syntax. En este caso, es necesario especificar el valor de las propiedades TypeInTargetAssembly y ResourceId para inicializar correctamente la extensión.In this case, specifying the value of both the TypeInTargetAssembly and ResourceId properties is required to properly initialize the extension.

En la implementación de WPFWPF XAMLXAML Reader, la clase ComponentResourceKey define el control de esta extensión de marcado.In the WPFWPF XAMLXAML reader implementation, the handling for this markup extension is defined by the ComponentResourceKey class.

ComponentResourceKey es una extensión de marcado.ComponentResourceKey is a markup extension. Las extensiones de marcado se suelen implementar cuando se necesita que los valores de los atributos de escape no sean valores literales o nombres de controladores, y este requisito es de índole más global que limitarse a colocar los convertidores de tipos en determinados tipos o propiedades.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. Todas las extensiones de marcado de XAMLXAML usan los caracteres { y } en su sintaxis de atributo, que es la convención que permite que un procesador de XAMLXAML reconozca que el atributo se debe procesar mediante una extensión de marcado.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. Para más información, vea Extensiones de marcado y XAML de WPF.For more information, see Markup Extensions and WPF XAML.

Vea tambiénSee also