Diretiva X:Key

Identifica os elementos que são criados e mencionados em um dicionário definido em XAML.

XAML Attribute Usage

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

Uso do atributo XAML (específico do WPF)

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

XAML Values

stringKeyValue

Uma seqüência de texto para usar como uma chave. A seqüência de caracteres de texto deve estar de acordo com o Gramática XamlName.

markupExtensionUsage

{} Delimitadores da extensão de marcação, dentro de um uso de extensão de marcação que fornece um objeto a ser usado como uma chave. Consulte comentários.

Comentários

Em 2006 de XAML e WPF, x:Key deve ser fornecido como um atributo. Você ainda pode usar as teclas de, mas isso requer um uso de extensão de marcação para fornecer o valor o formulário de atributo. Se você estiver usando o XAML de 2009, x:Key pode ser especificado como um elemento, para suportar explicitamente os dicionários chaveados por tipos de objeto diferente de seqüências de caracteres sem exigir um intermediário de extensão de marcação. Consulte o "2009 XAML" seção neste tópico. O restante da seção Remarks aplica-se especificamente para a implementação de XAML de 2006.

The attribute value of x:Key can be any string defined in the Gramática XamlName or can be an object evaluated through a markup extension. Consulte "Notas de uso do WPF" Para obter um exemplo do WPF.

Os elementos filho do elemento pai que é um IDictionary implementação normalmente deve incluir um x:Key atributo que especifica um valor de chave exclusivo dentro do dicionário. Estruturas podem implementar as propriedades de chave alias para substituir x:Key em determinados tipos; tipos de definem essas propriedades devem ser atribuídos com DictionaryKeyPropertyAttribute.

O equivalente do código de especificação de x:Key é a chave que é usada para a base IDictionary. Por exemplo, um x:Key que é aplicado na marcação para um recurso no WPF é equivalente ao valor da key parâmetro do ResourceDictionary.Add Quando você adiciona o recurso para um WPF ResourceDictionary no código.

Notas de uso do WPF

Os objetos filho de um pai do objeto ou seja um IDictionary implementação, como o WPF ResourceDictionary, normalmente deve incluir um x:Key atributo e o valor da chave devem ser exclusivo no dicionário. Existem duas exceções notáveis:

O WPF XAML implementação e aplicação modelo geral, exclusividade de chave não é verificada pelo compilador de marcação XAML. Em vez disso, ausente ou não exclusivos x:Key valores fazem com que o analisador de tempo de carregamento XAML erros. No entanto, Visual Studio o tratamento dos dicionários do WPF com freqüência pode observar tais erros na fase de design.

Observe que a sintaxe mostrada, o ResourceDictionary objeto está implícito em como o processador do WPF XAML produz uma coleção para preencher um Resources coleção. A ResourceDictionary não é geralmente fornecido explicitamente como um elemento na marcação, embora possa ser em alguns casos se quisesse para maior clareza (seria um elemento de objeto de coleção entre o Resources o elemento de propriedade e os itens que preencher o dicionário). Para obter informações sobre por que um objeto da coleção é quase sempre um elemento implícito na marcação, consulte Sintaxe XAML em detalhes.

Na implementação do WPF XAML, a manipulação de chaves de dicionário de recurso é definida pelo ResourceKey classe de abstrata. No entanto, o processador do WPF XAML produz diferentes tipos de extensão de base para chaves com base em seus usos. Por exemplo, a chave para uma DataTemplate ou qualquer classe derivada é tratada separadamente e produz um distintos DataTemplateKey objeto.

Chaves e nomes de usam diretivas diferentes e elementos de linguagem (x:Key versus x:Name) na definição básica do XAML. Nomes e as chaves também são usados em situações diferentes, a definição do WPF e a aplicação desses conceitos. For details, see Namescopes do WPF XAML.

Conforme mencionado anteriormente, o valor de uma chave pode ser fornecido por meio de uma extensão de marcação e pode ser diferente, por exemplo, um valor de seqüência de caracteres. Um cenário de WPF de exemplo é que o valor de x:Key pode ser um ComponentResourceKey. Certos controles expõem uma chave de estilo desse tipo para um recurso de estilo personalizado que influencia a parte a aparência e comportamento do controle sem substituir totalmente o estilo. An example of such a key is ButtonStyleKey.

O recurso de dicionário mesclado WPF apresenta considerações adicionais sobre a exclusividade de chave e o comportamento de pesquisa de chave. For more information, see Dicionários de Recursos mesclados.

XAML 2009

XAML 2009 libera a restrição que x:Key ser sempre fornecidos no formulário de atributo.

No WPF, você pode usar os recursos de 2009 de XAML, mas apenas para o XAML não é marcação-compilado. Compilado de marcação XAML para WPF e o formulário BAML do XAML não suportam atualmente os recursos e palavras-chave de XAML de 2009.

Em 2009 de XAML, você pode especificar x:Key elementos por meio do seguinte uso:

Uso de elemento XAML (somente de XAML 2009)

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

XAML Values

keyObject

Elemento de objeto para o objeto que é usado como chave para um determinado object em um dicionário especializado.

  • O recipiente/pai para esse tipo de uso não é mostrado aqui. objectdeve ser um filho de um elemento de objeto que representa uma implementação especializada de dicionário. keyObjecté esperado para ser uma instância de objeto (ou um valor de um tipo de valor) que é apropriado, como a chave para essa implementação específica do dicionário especializado.

  • WPF não implementa os dicionários que exigem esse uso. Chaves de objeto é mais um recurso geral da linguagem XAML, possivelmente útil para determinados cenários de dicionário personalizado onde criar o dicionário em XAML é desejável. Para recursos do WPF como, por exemplo, estilos implícitos que usam chaves de não-seqüência de recursos, outras técnicas para estabelecer ou especificando as chaves existem, portanto, não é necessário usar uma chave do objeto.

  • keyObject também poderia ser um uso de extensão de marcação em forma de elemento de objeto, em vez de uma instância de objeto de direta.

Notas de uso do Silverlight

x:Keypara o Silverlight é documentado separadamente. Para obter mais informações, consulte Namespace XAML (x:) Recursos de linguagem (Silverlight).

Consulte também

Referência

Extensão de marcação StaticResource

Conceitos

Visão geral sobre Recursos

Recursos e código