Compartilhar via


Extensão de marcação ComponentResourceKey

Define e referencia chaves para recursos carregados de assemblies externos. Isso permite que um recurso de pesquisa especifique um tipo de destino em um assembly, em vez de um dicionário de recurso explícito em um assembly ou em uma classe.

Uso do atributo XAML (configuração de chave, compacta)

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

Uso do atributo XAML (configuração de chave, detalhada)

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

Uso do atributo XAML (solicitação de recurso, compacta)

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

Uso do atributo XAML (solicitação de recurso, detalhada)

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

Valores XAML

Valor Descrição
targetTypeName O nome do tipo CLR (Public Common Language Runtime) definido no assembly de recursos.
targetID A chave para o recurso. Quando recursos forem pesquisados, targetID será análogo à Diretiva X:Key do recurso.

Comentários

Como visto nos usos acima, um uso de extensão de marcação {ComponentResourceKey} é encontrado em dois locais:

  • A definição de uma chave em um dicionário de recursos de tema, conforme fornecido por um autor de controle.

  • Acessando um recurso de tema do assembly, quando você está remodelando o controle, mas deseja usar valores de propriedade que vêm dos recursos fornecidos pelos temas do controle.

Para fazer referência a recursos de componente que vêm de temas, geralmente é recomendável usar {DynamicResource}, em vez de {StaticResource}. Isso é mostrado em usos. {DynamicResource} é recomendado porque o tema em si pode ser alterado pelo usuário. Se você desejar que o recurso do componente que mais se aproxima da intenção do autor do controle para dar suporte a um tema, habilite a referência de recurso do componente para que seja dinâmica também.

O TypeInTargetAssembly identifica um tipo que existe no assembly de destino onde o recurso é realmente definido. A ComponentResourceKey pode ser definido e usado independentemente de saber exatamente onde o é definido, mas eventualmente deve resolver o TypeInTargetAssembly tipo por meio de assemblies referenciados.

Um uso comum para ComponentResourceKey é definir chaves que são expostas como membros de uma classe. Para esse uso, você usa o construtor de ComponentResourceKey classe, não a extensão de marcação. Para obter mais informações, consulte ComponentResourceKey, ou a seção "Definindo e referenciando chaves para recursos de tema" do tópico Visão geral da criação de controle.

Para estabelecer chaves e referenciar recursos de chave, sintaxe do atributo normalmente é usada para a extensão de marcação ComponentResourceKey.

A sintaxe compacta mostrada depende da assinatura do construtor e do ComponentResourceKey uso de parâmetros posicionais de uma extensão de marcação. A ordem na qual o targetTypeName e o targetID são apresentados é importante. A sintaxe detalhada depende do ComponentResourceKey construtor sem parâmetros e, em seguida, define o TypeInTargetAssembly e ResourceId de uma maneira análoga a uma sintaxe de atributo verdadeiro em um elemento de objeto. Na sintaxe detalhada, a ordem na qual as propriedades são definidas não é importante. O relacionamento e os mecanismos dessas duas alternativas (compacta e detalhada) é descrito em mais detalhes no tópico Extensões de marcação e XAML WPF.

Tecnicamente, o valor de targetID pode ser qualquer objeto, não precisa ser uma cadeia de caracteres. No entanto, o uso mais comum no WPF é alinhar o valor targetID com formulários que são cadeias de caracteres e o ponto em que tais cadeias são válidas na Gramática XamlName.

O ComponentResourceKey pode ser usado na sintaxe de elemento de objeto. Nesse caso, especificar o TypeInTargetAssembly valor das propriedades e ResourceId é necessário para inicializar corretamente a extensão.

Na implementação do leitor XAML do WPF, a manipulação dessa extensão de marcação é definida pela ComponentResourceKey classe.

ComponentResourceKey é uma extensão da marcação. Extensões de marcação são tipicamente implementadas quando existe um requisito que permite que valores de atributo sejam diferentes de valores literais ou nomes de manipuladores, e o requisito é mais global do que simplesmente colocar conversores de tipo em certos tipos ou propriedades. Todas as extensões de marcação em XAML usam os caracteres { e } em sua sintaxe de atributo, que é a convenção pela qual um processador XAML reconhece que uma extensão de marcação deve processar o atributo. Para obter mais informações, consulte Extensões de marcação e XAML do WPF.

Confira também