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
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
.NET Desktop feedback