Extensão de marcação DynamicResource
Fornece um valor para qualquer atributo de propriedade XAML para fazer o valor ser uma referência a um recurso definido. O comportamento de pesquisa para esse recurso é análogo à pesquisa em tempo de execução.
Uso de atributos XAML
<object property="{DynamicResource key}" .../>
Uso do elemento Property em XAML
<object>
<object.property>
<DynamicResource ResourceKey="key" .../>
</object.property>
</object>
Valores de XAML
key |
A chave para o recurso solicitado. Essa chave foi inicialmente atribuída pelo Atributo x:Key se um recurso foi criado via marcação, ou foi fornecido como o parâmetro key ao chamar ResourceDictionary.Add se o recurso foi criado em código. |
Comentários
Um DynamicResource irá criar uma expressão temporária durante a compilação inicial e, portanto, adiar a pesquisa por recursos até que o recurso solicitado valor seja realmente necessário para construir um objeto. Isso pode potencialmente ser depois da página XAML ser carregada. O valor do recurso será encontrado com base na pesquisa pela chave contra todos os dicionários de recursos ativos a partir do escopo da página atual e substituirá a expressão temporária da compilação.
Observação importante: |
---|
Em termos de propriedade de dependência precedência , um DynamicResource expressão é equivalente a posição onde a referência de recursos dinâmicos é aplicada. Se você definir um valor local para uma propriedade que anteriormente tinha uma expressão DynamicResource como seu valor local, o DynamicResource será completamente removido. Para obter detalhes, consulte:Precedência de valores de propriedade de dependência. |
Determinados cenários de acesso a recursos são particularmente apropriados para DynamicResource ao invés de Extensão de marcação StaticResource. Consulte Visão geral sobre Recursos para uma discussão sobre os méritos relativos e as implicações de desempenho de DynamicResource e StaticResource.
A ResourceKey especificada deve corresponder a um recurso existente determinado pelo Atributo x:Key em algum nível na sua página, ou aplicativo, os temas de controle e recursos externos (ou recursos do sistema) disponíveis e a pesquisa por recursos acontecerão nessa ordem. Para obter mais informações sobre pesquisa por recursoss para recursos estáticos e dinâmicos, consulte Visão geral sobre Recursos.
Uma chave de recurso pode ser qualquer sequência 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 sobre criação de controles.
As APIs para pesquisa por valores de recursos, como FindResource, seguem a mesma lógica de pesquisa por recursos usada por DynamicResource.
O meio declarativo alternativo de referenciar um recurso é como uma Extensão de marcação StaticResource.
Sintaxe de atributo é a sintaxe mais comum usada com esta extensão de marcação. O símbolo-string fornecido após a string identificadora do DynamicResource é atribuído como o valor do ResourceKey da classe de extensão DynamicResourceExtension subjacente.
DynamicResource pode ser usada na sintaxe de 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 se algumas propriedades são opcionais. Como DynamicResource tem apenas uma propriedade configurável, que é necessária, esse uso detalhado não é típico.
Na implementação de processador XAML WPF, o tratamento para esta extensão de marcação é definida pela classe DynamicResourceExtension.
DynamicResource é uma extensão de marcação. Extensões de marcação são tipicamente implementadas quando existe um requisito de escapar valores de atributo para serem 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 no XAML usam os caracteres { e } em sua sintaxe de atributo, que é a convenção pela qual o processador XAML reconhece que uma extensão de markup precisa processar o atributo. Para obter mais informações, consulte Extensão de Marcação e XAML.