Compartir a través de


Extensión de marcado ComponentResourceKey

Define y hace referencia a claves para los recursos que se cargan desde ensamblados 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 (clave de configuración, resumido)

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

Uso de atributos XAML (clave de ajuste, detallado)

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

Uso de atributos XAML (solicitud de recursos, compacto)

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

Uso de atributos XAML (solicitud de recurso, verboso)

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

Valores XAML

Importancia Descripción
targetTypeName Nombre del tipo público de Common Language Runtime (CLR) que se define en el ensamblado de recursos.
targetID La clave para el recurso. Cuando se busquen recursos, targetID será análogo a la directiva x:Key del recurso.

Observaciones

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

  • Definición de una clave dentro de un diccionario de recursos de tema, tal como lo proporciona un autor de control.

  • Acceder a un recurso de tema desde el ensamblado, al volver a diseñar la plantilla del control, pero usando valores de propiedad que proceden de recursos proporcionados por los temas del control.

Para hacer referencia a los recursos de componente 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 que más se ajuste a la intención del autor del control de admitir un tema, también debe habilitar su referencia de recursos del componente para que sea dinámica.

TypeInTargetAssembly identifica un tipo que existe en el ensamblado de destino donde se define realmente el recurso. Se ComponentResourceKey puede definir y usar independientemente de saber exactamente dónde se define TypeInTargetAssembly, pero finalmente se debe resolver el tipo a través de los ensamblados 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 usa el ComponentResourceKey constructor de clases, no la extensión de marcado. Para obtener más información, consulte ComponentResourceKey, o la sección "Definir y hacer referencia a claves para recursos de tema" en el tema Información general sobre la creación de controles.

Para establecer claves y hacer referencia a recursos clave, la sintaxis de atributo se usa normalmente para la extensión de marcado ComponentResourceKey.

La sintaxis compacta que se presenta se basa en la firma del constructor ComponentResourceKey y en el uso de parámetros posicionales dentro de una extensión de marcado. El orden en el que se dan el targetTypeName y el targetID es importante. La sintaxis detallada se basa en el constructor sin parámetros ComponentResourceKey y luego establece TypeInTargetAssembly y ResourceId de manera análoga a una verdadera sintaxis de atributo en un elemento de objeto. En la sintaxis detallada, el orden en qué se establecen las propiedades no es importante. La relación y los mecanismos de estas dos alternativas (compactas y verbosas) 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 targetID valor con formularios que son cadenas y donde dichas cadenas son válidas en la gramática xamlName.

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

En la implementación del lector XAML de WPF, la clase ComponentResourceKey define el manejo de esta extensión de marcado.

ComponentResourceKey es una extensión de marcado. Las extensiones de marcado normalmente se implementan cuando hay un requisito de escape de valores de atributo que no sean valores literales o nombres de controlador, y el requisito es más global que simplemente colocar convertidores de tipos en determinados tipos o propiedades. Todas las extensiones de marcado en XAML usan los caracteres { y } en su sintaxis de atributo, que es la convención por la que un procesador XAML reconoce que una extensión de marcado debe procesar el atributo. Para obtener más información, consulta Extensiones de marcado y XAML de WPF.

Consulte también