Extensão de marcação ComponentResourceKey
Define e referencia chaves para recursos carregados de assemblies externos. Isso permite pesquisar recursos especificando um tipo de destino em um assembly, ao invés de usar explicitamente um dicionário de recursos 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 (solicitando recurso, compacto)
<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 (Common Language Runtime) público definido na montagem de recursos. |
targetID |
A chave para o recurso. Quando recursos forem pesquisados, targetID será análogo à Diretiva X:Key do recurso. |
Observações
Conforme 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 referenciar recursos de componente provenientes de temas, geralmente é recomendável que você use {DynamicResource}
em vez de {StaticResource}
. Isso é mostrado nos usos. {DynamicResource}
é recomendável 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 em que o recurso é realmente definido. Um ComponentResourceKey
pode ser definido e usado independentemente de saber exatamente em que local o TypeInTargetAssembly é definido, mas, por fim, deve resolver o 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 classe ComponentResourceKey, não a extensão de marcação. Para obter mais informações, consulte ComponentResourceKey ou a seção "Definindo e fazendo referência a chaves para recursos de tema" do tópico Visão geral de criação do controle.
Para estabelecer chaves e referenciar recursos chaveados, a sintaxe de atributo é comumente usada para a extensão de marcação ComponentResourceKey
.
A sintaxe compacta mostrada depende da assinatura do construtor ComponentResourceKey e do uso de parâmetros posicionais em uma extensão de marcação. A ordem na qual os targetTypeName
e targetID
são dados é importante. A sintaxe verbosa depende do construtor sem parâmetros ComponentResourceKey e então define TypeInTargetAssembly e ResourceId de uma forma semelhante à sintaxe de um atributo verdadeiro em um elemento de objeto. Na sintaxe detalhada, a ordem na qual as propriedades são definidas não é importante. A relação e os mecanismos dessas duas alternativas (compacto e verboso) são descritos com mais detalhes no tópico Extensões de Marcação e WPF XAML.
Tecnicamente, o valor para targetID
pode ser qualquer objeto, ele 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.
ComponentResourceKey
pode ser usado na sintaxe do elemento de objeto. Nesse caso, especificar o valor das propriedades TypeInTargetAssembly e ResourceId é necessário para inicializar corretamente a extensão.
Na implementação do leitor XAML do WPF, o tratamento dessa extensão de marcação é definido pela classe ComponentResourceKey.
ComponentResourceKey
é uma extensão da marcação. As extensões de marcação normalmente são implementadas quando há um requisito para escapar de valores de atributo que não sejam valores literais ou nomes de manipulador, e o requisito é mais global do que apenas colocar conversores de tipo em determinados tipos ou propriedades. Todas as extensões de marcação no 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.
Consulte também
.NET Desktop feedback