x:Key (Directiva)

Identifica de forma única los elementos creados y a los que se hace referencia en un diccionario definido por XAML. Agregar un valor a un elemento de objeto XAML es la manera más común de identificar un recurso en un diccionario de x:Key recursos, por ejemplo, en ResourceDictionary wpf.

Uso de atributos XAML

<object x:Key="stringKeyValue".../>  
-or-  
<object x:Key="{markupExtensionUsage}".../>  

Uso de atributos XAML (específico de WPF)

<object.Resources>  
  <object x:Key="stringKeyValue".../>  
</object.Resources>  
-or-  
<object.Resources>  
  <object x:Key="{markupExtensionUsage}".../>  
</object.Resources>  

Valores XAML

Valor Descripción
stringKeyValue Cadena de texto que se usará como clave. La cadena de texto debe ajustarse a la gramática xamlName.
markupExtensionUsage Dentro de los delimitadores de extensión de marcado {} , un uso de extensión de marcado que proporciona un objeto que se usará como clave. Vea la sección Comentarios.

Comentarios

x:Key admite el concepto de diccionario de recursos XAML. XAML como lenguaje no define una implementación del diccionario de recursos, que se deja a marcos de interfaz de usuario específicos. Para obtener más información sobre cómo se implementan los diccionarios de recursos XAML en WPF, vea Introducción a los recursos XAML (WPF .NET).

En XAML 2006 y WPF, x:Key se debe proporcionar como atributo. Todavía puede usar claves que no son de cadena, pero esto requiere un uso de la extensión de marcado para proporcionar el valor que no es de cadena en forma de atributo. Si usa XAML 2009, se puede especificar como un elemento para admitir explícitamente diccionarios con clave por tipos de objeto distintos de cadenas sin necesidad de una extensión de marcado x:Key intermedia. Vea la sección "XAML 2009" de este tema. El resto de la sección Comentarios se aplica específicamente a la implementación de XAML 2006.

El valor del atributo de puede ser cualquier cadena definida en la gramática xamlName o puede ser un objeto x:Key evaluado mediante una extensión de marcado. Vea "Notas de uso de WPF" para obtener un ejemplo de WPF.

Los elementos secundarios de un elemento primario que es una implementación normalmente deben incluir un atributo que especifique un valor de IDictionary clave único dentro de ese x:Key diccionario. Los marcos de trabajo pueden implementar propiedades de clave con alias para sustituir por en tipos concretos; los tipos que definen estas propiedades deben x:Key tener el atributo DictionaryKeyPropertyAttribute .

El código equivalente a especificar x:Key es la clave que se usa para el IDictionary subyacente. Por ejemplo, un que se aplica en el marcado para un recurso en WPF es equivalente al valor del parámetro de cuando se agrega el recurso x:Key a un WPF en el key ResourceDictionary.Add ResourceDictionary código.

Notas de uso de WPF

Los objetos secundarios de un objeto primario que es una implementación, como WPF , normalmente deben incluir un atributo y el valor de clave debe ser IDictionary único dentro de ese ResourceDictionary x:Key diccionario. Hay dos excepciones importantes:

  • Algunos tipos de WPF declaran una clave implícita para el uso del diccionario. Por ejemplo, un Style con un , o con un , puede estar en y usar la clave TargetType DataTemplate DataType ResourceDictionary implícita.

  • WPF admite un concepto de diccionario de recursos combinado. Las claves se pueden compartir entre los diccionarios combinados y se puede acceder al comportamiento de la clave compartida mediante FindResource . Para obtener más información, vea Diccionarios de recursos combinados.

En el modelo de aplicación y la implementación xaml de WPF general, el compilador de marcado XAML no comprueba la unidad de clave. En su lugar, los valores que faltan o que no son únicos provocan errores del x:Key analizador XAML en tiempo de carga. Sin embargo, Visual Studio control de diccionarios para WPF a menudo puede tener en cuenta estos errores en la fase de diseño.

Tenga en cuenta que, en la sintaxis mostrada, el objeto está implícito en la forma en que el procesador XAML de WPF genera una ResourceDictionary colección para rellenar una Resources colección. Normalmente, no se proporciona explícitamente como elemento en el marcado, aunque puede ser en algunos casos si se desea mayor claridad (sería un elemento de objeto de colección entre el elemento de propiedad y los elementos de que rellenan el ResourceDictionary Resources diccionario). Para obtener información sobre por qué un objeto de colección es casi siempre un elemento implícito en el marcado, vea Sintaxis XAML en detalle.

En la implementación XAML de WPF, la clase abstracta define el control de las claves del diccionario ResourceKey de recursos. Sin embargo, el procesador XAML de WPF genera diferentes tipos de extensión subyacentes para las claves en función de sus usos. Por ejemplo, la clave para una clase derivada o se controla por DataTemplate separado y genera un objeto DataTemplateKey distinto.

Las claves y los nombres usan directivas y elementos de lenguaje diferentes ( x:Key frente a ) en la x:Name definición básica de XAML. La definición de WPF y la aplicación de estos conceptos también usan claves y nombres en distintas situaciones. Para obtener más información, vea Ámbitos de nombres XAML de WPF.

Como se indicó anteriormente, el valor de una clave se puede proporcionar a través de una extensión de marcado y puede ser distinto de un valor de cadena. Un escenario de WPF de ejemplo es que el valor x:Key de puede ser ComponentResourceKey. Algunos controles exponen una clave de estilo de ese tipo para un recurso de estilo personalizado que influye en parte de la apariencia y el comportamiento de ese control sin reemplazar totalmente el estilo. Un ejemplo de este tipo de clave es ButtonStyleKey .

La característica de diccionario combinado de WPF presenta consideraciones adicionales para la unidad de clave y el comportamiento de búsqueda de claves. Para obtener más información, vea Diccionarios de recursos combinados.

XAML 2009

XAML 2009 relaja la restricción que x:Key siempre se proporciona en forma de atributo.

En WPF, puede usar características de XAML 2009, pero solo para XAML que no está compilado con marcado. XAML compilado por marcado para WPF y el formulario BAML de XAML no admiten de momento las palabras clave y características de XAML 2009.

En XAML 2009, puede especificar elementos x:Key mediante el uso siguiente:

Uso de elementos XAML (solo XAML 2009)

<object>  
  <x:Key>  
keyObject  
  </x:Key>  
...  
</object>  

Valores XAML

Value Descripción
keyObject Elemento Object para el objeto que se usa como clave para un determinado object en un diccionario especializado.
  • El contenedor o elemento primario para este tipo de uso no se muestra aquí. object se espera que sea un elemento secundario de un elemento de objeto que representa una implementación de diccionario especializada. keyObject se espera que sea una instancia de objeto (o un valor de un tipo de valor) que sea adecuada como clave para esa implementación de diccionario especializada concreta.

  • WPF no implementa diccionarios que requieran este uso. Las claves de objeto son más una característica general del lenguaje XAML, posiblemente útil para determinados escenarios de diccionario personalizado en los que es conveniente crear el diccionario en XAML. Para las características de WPF, como los estilos implícitos que usan claves que no son de cadena para los recursos, existen otras técnicas para establecer o especificar las claves, por lo que no es necesario usar una clave de objeto.

  • keyObject también podría ser un uso de extensión de marcado en forma de elemento de objeto, en lugar de una instancia de objeto directo.

Notas de uso de Silverlight

x:Key para Silverlight se documenta por separado. Para obtener más información, vea Espacio de nombres XAML (x:) Características del lenguaje (Silverlight).

Vea también