Compartilhar via


Diretiva x:Key

Identifica exclusivamente os elementos que são criados e referenciados em um dicionário definido por XAML. Adicionar um valor x:Key a um elemento de objeto XAML é a maneira mais comum de identificar um recurso em um dicionário de recursos, por exemplo, em um ResourceDictionarydo WPF.

Uso do atributo XAML

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

Uso de atributo XAML (específico do WPF)

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

Valores XAML

Valor Descrição
stringKeyValue Uma cadeia de caracteres de texto a ser usada como uma chave. A cadeia de caracteres de texto deve estar em conformidade com o gramática XamlName .
markupExtensionUsage Dentro dos delimitadores de extensão de marcação {}, um uso de extensão de marcação que fornece um objeto a ser usado como chave. Consulte Comentários.

Observações

x:Key dá suporte ao conceito de dicionário de recursos XAML. XAML como um idioma não define uma implementação de dicionário de recursos, que é deixada para estruturas de interface do usuário específicas. Para saber mais sobre como os dicionários de recursos XAML são implementados no WPF, consulte Visão geral dos recursos XAML (WPF .NET).

No XAML 2006 e no WPF, x:Key deve ser fornecido como um atributo. Você ainda pode usar chaves nãostring, mas isso requer um uso de extensão de marcação para fornecer o valor nãostring no formulário de atributo. Se você estiver usando o XAML 2009, x:Key poderá ser especificado como um elemento, para dar suporte explicitamente a dicionários com chave por tipos de objeto diferentes de cadeias de caracteres sem a necessidade de uma extensão de marcação intermediária. Consulte a seção "XAML 2009" neste tópico. O restante da seção Comentários se aplica especificamente à implementação do XAML 2006.

O valor do atributo de pode ser qualquer cadeia de caracteres definida no de Gramática XamlName ou pode ser um objeto avaliado por meio de uma extensão de marcação. Consulte "Notas de Uso do WPF" para obter um exemplo do WPF.

Elementos filho de um elemento pai que é uma implementação IDictionary normalmente devem incluir um atributo x:Key que especifica um valor de chave exclusivo dentro desse dicionário. As estruturas podem implementar propriedades de chave alias para substituir x:Key em determinados tipos; os tipos que definem essas propriedades devem ser atribuídos com DictionaryKeyPropertyAttribute.

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

Notas de uso do WPF

Objetos filho de um objeto pai que é uma implementação IDictionary, como o ResourceDictionarydo WPF, normalmente devem incluir um atributo x:Key e o valor da chave deve ser exclusivo dentro desse dicionário. Há duas exceções notáveis:

  • Alguns tipos de WPF declaram uma chave implícita para uso de dicionário. Por exemplo, um Style com um TargetTypeou um DataTemplate com um DataTypepode estar em um ResourceDictionary e usar a chave implícita.

  • O WPF dá suporte a um conceito de dicionário de recursos mesclado. As chaves podem ser compartilhadas entre os dicionários mesclados e o comportamento da chave compartilhada pode ser acessado usando FindResource. Para obter mais informações, consulte dicionários de recursos mesclados.

Na implementação geral do WPF XAML e no modelo de aplicativo, a exclusividade da chave não é verificada pelo compilador de marcação XAML. Em vez disso, valores de x:Key ausentes ou não-comunicados causam erros de analisador XAML em tempo de carga. No entanto, o tratamento de dicionários do Visual Studio para WPF geralmente pode observar esses erros na fase de design.

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

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

Chaves e nomes usam diretivas e elementos de linguagem diferentes (x:Key versus x:Name) na definição de XAML básica. Chaves e nomes também são usados em situações diferentes pela definição do WPF e pela aplicação desses conceitos. Para obter detalhes, consulte namescopes XAML do WPF.

Conforme indicado anteriormente, o valor de uma chave pode ser fornecido por meio de uma extensão de marcação e pode ser diferente de um valor de cadeia de caracteres. Um cenário de exemplo do WPF é que o valor de pode ser umComponentResourceKey . Determinados controles expõem uma chave de estilo desse tipo para um recurso de estilo personalizado que influencia parte da aparência e comportamento desse controle sem substituir totalmente o estilo. Um exemplo dessa chave é ButtonStyleKey.

O recurso de dicionário mesclado do WPF apresenta considerações adicionais sobre a exclusividade da chave e o comportamento de pesquisa chave. Para obter mais informações, consulte dicionários de recursos mesclados.

XAML 2009

O XAML 2009 relaxa a restrição que x:Key sempre ser fornecida no formato de atributo.

No WPF, você pode usar recursos XAML 2009, mas apenas para XAML que não é compilado por marcação. O XAML compilado por marcação para WPF e a forma BAML de XAML atualmente não dão suporte às palavras-chave e recursos XAML 2009.

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

Uso do elemento XAML (somente XAML 2009)

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

Valores XAML

Valor Descrição
keyObject Elemento de objeto para o objeto que é usado como a chave para um determinado object em um dicionário especializado.
  • O contêiner/pai para esse tipo de uso não é mostrado aqui. object deve ser filho de um elemento de objeto que representa uma implementação de dicionário especializada. keyObject deve ser uma instância de objeto (ou um valor de um tipo de valor) apropriada como a chave para essa implementação de dicionário especializada específica.

  • O WPF não implementa dicionários que exigem esse uso. As chaves de objeto são mais um recurso geral da linguagem XAML, possivelmente útil para determinados cenários de dicionário personalizado em que a criação do dicionário em XAML é desejável. Para recursos do WPF, como estilos implícitos que usam chaves que não são de cadeia de caracteres para recursos, outras técnicas para estabelecer ou especificar as chaves existem, portanto, o uso de uma chave de objeto não é necessário.

  • keyObject também pode ser um uso de extensão de marcação no formato de elemento de objeto, em vez de uma instância de objeto direto.

Notas de uso do Silverlight

x:Key para Silverlight é documentado separadamente. Para obter mais informações, consulte namespace XAML (x:) Recursos de linguagem (Silverlight).

Consulte também