Compartilhar via


Extensão de marcação DynamicResource

Fornece um valor para qualquer atributo de propriedade XAML, adiando esse valor para ser uma referência a um recurso definido. O comportamento de pesquisa desse recurso é análogo à pesquisa em tempo de execução.

Uso do atributo XAML

<object property="{DynamicResource key}" ... />  

Uso do elemento propriedade XAML

<object>  
  <object.property>  
    <DynamicResource ResourceKey="key" ... />  
  </object.property>  
</object>  

Valores XAML

Valor Descrição
key A chave do recurso solicitado. Essa chave foi inicialmente atribuída pela diretiva x:Key se um recurso foi criado na marcação ou foi fornecido como o parâmetro key ao chamar ResourceDictionary.Add se o recurso foi criado no código.

Observações

Um DynamicResource criará uma expressão temporária durante a compilação inicial e, portanto, adiará a pesquisa de recursos até que o valor do recurso solicitado seja realmente necessário para construir um objeto. Isso pode ser potencialmente depois que a página XAML é carregada. O valor do recurso será encontrado com base na pesquisa pela chave em todos os dicionários de recursos ativos, no escopo da página atual, e substituirá a expressão de espaço reservado da compilação.

Importante

Em termos de precedência de propriedades de dependência, uma expressão DynamicResource é equivalente à posição em que a referência de recurso dinâmico é aplicada. Se você definir um valor local para uma propriedade que anteriormente tinha uma expressão DynamicResource como o valor local, o DynamicResource será completamente removido. Para obter mais detalhes, consulte Precedência do valor da propriedade da dependência.

Determinados cenários de acesso a recursos são particularmente apropriados para DynamicResource, ao contrário de uma Extensão de Marcação StaticResource. Consulte Recursos XAML para ver uma discussão sobre os méritos relativos e as implicações de desempenho de DynamicResource e StaticResource.

O ResourceKey deve corresponder a um recurso existente determinado pela diretiva x:Key em algum nível da página, do aplicativo, dos temas de controle disponíveis e recursos externos ou do sistema, e a pesquisa de recurso ocorrerá nessa ordem. Para obter mais informações sobre a pesquisa de recursos para recursos estáticos e dinâmicos, consulte recursos XAML.

Uma chave de recurso pode ser qualquer cadeia de caracteres definida na Gramática XamlName. Uma chave de recurso também pode ser outros tipos de objeto, como um Type. Uma chave Type é fundamental para como os controles podem ser estilizados por temas. Para obter mais informações, consulte Visão geral da criação de controle.

AS APIs para pesquisa de valores de recurso, como FindResource, seguem a mesma lógica de pesquisa de recursos usada pelo DynamicResource.

O meio declarativo alternativo de referenciar um recurso é como uma Extensão de Marcação StaticResource.

A sintaxe do atributo é a sintaxe mais comum usada com essa extensão de marcação. O token de cadeia de caracteres fornecido após o identificador DynamicResource é atribuído como o valor ResourceKey da classe de extensão DynamicResourceExtension subjacente.

DynamicResource pode ser usado na sintaxe do elemento de objeto. Nesse caso, é necessário especificar o valor da propriedade ResourceKey.

DynamicResource também pode ser usado em um atributo detalhado que especifica a propriedade ResourceKey como sendo o par propriedade=valor:

<object property="{DynamicResource ResourceKey=key}" ... />  

O uso detalhado geralmente é útil para as extensões que têm mais de uma propriedade configurável, ou caso algumas propriedades sejam opcionais. Como DynamicResource tem apenas uma propriedade configurável, a qual é obrigatória, esse uso verboso não é típico.

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

DynamicResource é 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