Partilhar via


Extensão de marcação ComponentResourceKey

Define e faz referência a chaves para recursos que são carregados de assemblies externos. Isso permite que uma pesquisa de recursos especifique um tipo de destino em um assembly, em vez de um dicionário de recursos explícito em um assembly ou em uma classe.

Uso de atributos XAML (chave de configuração, compacto)

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

Uso de atributos XAML (chave de definição, verboso)

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

Uso de atributos XAML (solicitando recurso, compacto)

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

Uso de atributos XAML (solicitando recurso, verboso)

<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 no assembly de recursos.
targetID A chave para o recurso. Quando os recursos são pesquisados, targetID será análogo à diretiva x:Key do recurso.

Observações

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

  • A definição de uma chave dentro de um dicionário de recursos temáticos, 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 de recursos fornecidos pelos temas do controle.

Para fazer referência a recursos de componentes provenientes de temas, geralmente é recomendável usar {DynamicResource} em vez de {StaticResource}. Isso é mostrado nos usos. {DynamicResource} é recomendado porque o tema em si pode ser alterado pelo usuário. Se você quiser que o recurso de componente que mais se aproxima da intenção do autor do controle para dar suporte a um tema, você deve habilitar sua referência de recurso de componente para ser dinâmico 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 TypeInTargetAssembly é definido, mas eventualmente deve resolver o tipo através de assemblies referenciados.

Um uso comum para ComponentResourceKey é definir chaves que são então expostas como membros de uma classe. Para esse uso, deve utilizar o construtor da classe ComponentResourceKey, 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 autoria de controlos.

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

A sintaxe compacta mostrada depende da assinatura do construtor ComponentResourceKey e do uso de parâmetros posicionais de uma extensão de marcação. A ordem em que os targetTypeName e targetID são dados é importante. A sintaxe verbosa depende do ComponentResourceKey construtor sem parâmetros e, em seguida, define o TypeInTargetAssembly e o ResourceId de uma forma análoga a uma sintaxe de atributo real em um elemento de objeto. Na sintaxe verbosa, a ordem em que as propriedades são definidas não é importante. A relação e os mecanismos dessas duas alternativas (compacto e detalhado) 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, não precisa ser uma cadeia de caracteres. No entanto, o uso mais comum no WPF é alinhar o targetID valor com formulários que são cadeias de caracteres e onde essas cadeias de caracteres são válidas na gramática XamlName.

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

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

ComponentResourceKey é uma extensão de linguagem de marcação. As extensões de marcação são geralmente implementadas quando há um requisito para evitar que os valores de atributos sejam diferentes dos valores literais ou nomes de funções manipuladoras, e o requisito é mais abrangente 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 Markup Extensions e WPF XAML.

Ver também