Partilhar 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 consulta para esse recurso é análogo à consulta em tempo de execução.

Uso de atributos XAML

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

Uso do elemento de 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 pelo x:Key Directive 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.

Comentários

Um DynamicResource criará uma expressão temporária durante a compilação inicial e, portanto, adiará a pesquisa de recursos até que o valor de recurso solicitado seja realmente necessário para construir um objeto. Isso pode potencialmente ocorrer depois que a página XAML for carregada. O valor do recurso será localizado com base na pesquisa de chave em todos os dicionários de recursos ativos, começando a partir do âmbito da página atual, e será substituído pela expressão de marcador de posição da compilação.

Importante

Em termos de precedência de propriedade dependente, uma expressão DynamicResource é equivalente à posição onde 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 informações detalhadas, consulte Dependency Property Value Precedence.

Certos cenários de acesso a recursos são particularmente apropriados para DynamicResource em oposição a um StaticResource Markup Extension. Consulte os Recursos XAML para obter uma discussão sobre os méritos relativos e as implicações de desempenho do DynamicResource e do StaticResource.

A ResourceKey especificada deve corresponder a um recurso existente determinado pela diretiva x:Key em algum nível na sua página, aplicação, os temas de controlo disponíveis e recursos externos, ou recursos do sistema, e a procura de recursos acontecerá nessa ordem. Para obter mais informações sobre a pesquisa de 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 mais informações, consulte a Visão Geral da Autoria de Controlo .

As APIs para pesquisa de valores de recursos, como FindResource, seguem a mesma lógica de pesquisa de recursos usada por DynamicResource.

O meio declarativo alternativo de referenciar um recurso é como um StaticResource Markup Extension.

A sintaxe de 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 subjacente DynamicResourceExtension.

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

DynamicResource também pode ser usado num uso de atributo verboso que especifica a propriedade ResourceKey como par propriedade=valor.

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

O uso detalhado geralmente é útil para extensões que têm mais de uma propriedade configurável, ou se algumas propriedades são opcionais. Como o DynamicResource tem apenas uma propriedade ajustável, que é necessária, esse uso verboso não é típico.

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

DynamicResource é uma extensão de linguagem de marcação. As extensões de marcação geralmente são implementadas quando há um requisito para escapar de valores de atributos diferentes de valores literais ou nomes de manipuladores, e o requisito é mais global do que apenas colocar conversores de tipo em determinados 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