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 para o recurso solicitado. Essa chave foi inicialmente atribuída pela Diretiva x:Key se um recurso foi criado na marcação ou foi fornecida como o parâmetro ao chamar ResourceDictionary.Add se o key recurso foi criado em código.

Comentários

Um DynamicResource criará uma expressão temporária durante a compilação inicial e, portanto, adiará a pesquisa por recursos até que o valor de recurso solicitado seja realmente necessário para construir um objeto. Isso pode ocorrer depois que a página XAML for 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 propriedade de dependência, uma expressão DynamicResource é equivalente à posição em que a referência de recurso dinâmico é aplicada. Se um valor local for definido para uma propriedade que tinha uma expressão DynamicResource como valor local anteriormente, o DynamicResource será totalmente removido. Para obter mais detalhes, consulte Precedência do valor da propriedade de 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 especificado ResourceKey deve corresponder a um recurso existente determinado por x:Key Directive em algum nível em sua página, aplicativo, os temas de controle disponíveis e recursos externos, ou recursos do sistema, e a pesquisa de recursos acontecerá 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 Typearquivo . Uma Type chave é 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 de atributo é a sintaxe mais comum usada com essa extensão de marcação. O token da cadeia de caracteres fornecido após a cadeia de caracteres identificadora DynamicResource é atribuído como o valor ResourceKey da classe de extensão subjacente DynamicResourceExtension.

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

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, que é necessária, esse uso detalhado não é típico.

Na implementação do processador XAML do WPF, o tratamento para essa extensão de marcação é definido pela DynamicResourceExtension classe.

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