Extensión de marcado ComponentResourceKey

Define y hace referencia a las claves de los recursos que se cargan desde conjuntos externos. 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.

Uso de atributos XAML (configuración de clave, compacto)

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

Uso de atributos XAML (configuración de clave, detallado)

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

Uso de atributos XAML (solicitud de recurso, compacto)

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

Uso de atributos XAML (solicitud de recurso, detallado)

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

Valores XAML

Value Descripción
targetTypeName El nombre del tipo público de Common Language Runtime (CLR) que se define en el conjunto de recursos.
targetID La clave del recurso. Cuando se busquen recursos, targetID será análogo a la x:Key Directive del recurso.

Comentarios

Como se ha visto en los usos anteriores, el uso de una extensión de marcado {ComponentResourceKey} se encuentra en dos lugares:

  • La definición de una clave dentro de un diccionario de recursos de tema, proporcionada por un autor de control.

  • Acceso a un recurso de tema desde el ensamblado, al volver a modificar el control, pero quiere usar valores de propiedad que proceden de los recursos proporcionados por los temas del control.

Para hacer referencia a recursos de componentes que proceden de temas, se recomienda generalmente usar {DynamicResource} en lugar de {StaticResource}. Esto se muestra en los usos. {DynamicResource} se recomienda porque el usuario puede cambiar el propio tema. Si desea que el recurso de componente coincida más estrechamente con la intención del autor del control para admitir un tema, debe habilitar también la referencia de recursos del componente para que sea dinámica.

El TypeInTargetAssembly identifica un tipo que existe en el ensamblado de destino donde el recurso está realmente definido. Un ComponentResourceKey se puede definir y usar independientemente de saber exactamente dónde está definido el TypeInTargetAssembly, pero eventualmente debe resolver el tipo a través de los conjuntos referenciados.

Un uso común para ComponentResourceKey es definir claves que se exponen a continuación como miembros de una clase. Para este uso, se utiliza el constructor de la clase ComponentResourceKey, no la extensión de marcado. Para obtener más información, vea ComponentResourceKey, o la sección "Definición de los recursos de tema y referencia a ellos" del tema Información general sobre la creación de controles.

Tanto para establecer claves como para referenciar recursos con clave, se suele utilizar la sintaxis de atributos para la extensión de marcado ComponentResourceKey.

La sintaxis compacta mostrada se basa en la signatura de construcción ComponentResourceKey y el uso de parámetros posicionales de una extensión de marcado. El orden en que se dan los targetTypeName y targetID es importante. La sintaxis detallada se basa en el constructor sin parámetros ComponentResourceKey, y luego establece los TypeInTargetAssembly y ResourceId de forma análoga a la sintaxis de un atributo verdadero en un elemento de objeto. En la sintaxis detallada, el orden en que se establecen las propiedades no es importante. 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.

Técnicamente, el valor de targetID puede ser cualquier objeto, no tiene que ser una cadena. Sin embargo, el uso más común en WPF es alinear el valor targetID con las formas que son cadenas, y donde tales cadenas son válidas en la gramática XamlName.

ComponentResourceKey se puede usar en la sintaxis de elementos de objeto. En este caso, es necesario especificar el valor de las propiedades TypeInTargetAssembly y ResourceId para inicializar correctamente la extensión.

La clase ComponentResourceKey define el control para esta extensión de marcado en la implementación del lector XAML de WPF.

ComponentResourceKey es una extensión de marcado. 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. Todas las extensiones de marcado de XAML utilizan los caracteres { y } en su sintaxis de atributo, que es la convención que permite que un procesador de XAML reconozca que el atributo se debe procesar mediante una extensión de marcado. Para más información, vea Extensiones de marcado y XAML de WPF.

Vea también