Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Fornece um valor para qualquer atributo XAML avaliando uma referência a um recurso já definido. Os recursos são definidos em um ResourceDictionary, e um uso StaticResource faz referência à chave desse recurso no ResourceDictionary.
Uso de atributos XAML
<object property="{StaticResource key}" .../>
Valores XAML
| Term | Description |
|---|---|
| chave | A chave para o recurso solicitado. Essa chave é inicialmente atribuída pelo ResourceDictionary. Uma chave de recurso pode ser qualquer cadeia de caracteres definida na gramática XamlName. |
Observações
StaticResource é uma técnica para obter valores para um atributo XAML que são definidos em outro lugar em um dicionário de recursos XAML. Os valores podem ser colocados em um dicionário de recursos porque se destinam a ser compartilhados por vários valores de propriedade ou porque um dicionário de recursos XAML é usado como uma técnica de empacotamento ou fatoração XAML. Um exemplo de uma técnica de empacotamento XAML é o dicionário de temas para um controle. Outro exemplo são dicionários de recursos mesclados usados para recurso alternativo.
StaticResource usa um argumento, que especifica a chave para o recurso solicitado. Uma chave de recurso é sempre uma cadeia de caracteres no XAML do Tempo de Execução do Windows. Para saber mais sobre como a chave de recurso é especificada inicialmente, veja atributo x:Key.
As regras pelas quais um StaticResource resolve para um item em um dicionário de recursos não são descritas neste tópico. Isso depende se a referência e o recurso existem em um modelo, se dicionários de recursos mesclados são usados e assim por diante. Para saber mais sobre como definir recursos e usar corretamente um ResourceDictionary, incluindo código de exemplo, veja ResourceDictionary e referências de recursos XAML.
Importante Um StaticResource não deve tentar fazer uma referência direta a um recurso que é definido lexicamente ainda mais dentro do arquivo XAML. A tentativa de fazê-lo não é suportada. Mesmo que a referência avançada não falhe, tentar fazer um acarreta uma penalização de desempenho. Para obter melhores resultados, ajuste a composição dos dicionários de recursos para que as referências diretas sejam evitadas.
A tentativa de especificar um StaticResource para uma chave que não pode ser resolvida gera uma exceção de análise XAML em tempo de execução. As ferramentas de design também podem oferecer avisos ou erros.
Na implementação do processador XAML do Tempo de Execução do Windows, não há representação de classe associada para a função StaticResource. StaticResource é exclusivamente para uso em XAML. O equivalente mais próximo no código é usar a API de coleção de um ResourceDictionary, por exemplo, chamando Contains ou TryGetValue.
A extensão de marcação {ThemeResource} é uma extensão de marcação semelhante que faz referência a recursos nomeados em outro local. A diferença é que a extensão de marcação {ThemeResource} tem a capacidade de retornar recursos diferentes, dependendo do tema do sistema que está ativo. Para obter mais informações, consulte {ThemeResource} markup extension.
StaticResource é uma extensão de marcação. As extensões de marcação geralmente são implementadas quando há a necessidade de fugir de valores de atributos diferentes de valores literais ou nomes de funções manipuladoras, e a necessidade é mais abrangente do que apenas colocar conversores de tipos 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.
Um exemplo de uso de {StaticResource}
Este exemplo de XAML é retirado do exemplo de vinculação de dados XAML.
<StackPanel Margin="5">
<!-- Add converter as a resource to reference it from a Binding. -->
<StackPanel.Resources>
<local:S2Formatter x:Key="GradeConverter"/>
</StackPanel.Resources>
<TextBlock Style="{StaticResource BasicTextStyle}" Text="Percent grade:" Margin="5" />
<Slider x:Name="sliderValueConverter" Minimum="1" Maximum="100" Value="70" Margin="5"/>
<TextBlock Style="{StaticResource BasicTextStyle}" Text="Letter grade:" Margin="5"/>
<TextBox x:Name="tbValueConverterDataBound"
Text="{Binding ElementName=sliderValueConverter, Path=Value, Mode=OneWay,
Converter={StaticResource GradeConverter}}" Margin="5" Width="150"/>
</StackPanel>
Este exemplo específico cria um objeto que é apoiado por uma classe personalizada e o cria como um recurso em um ResourceDictionary. Para ser um recurso válido, esse local:S2Formatter elemento também deve ter um valor de atributo x:Key . O valor do atributo é definido como "GradeConverter".
O recurso é então solicitado um pouco mais adiante no XAML, onde se vê {StaticResource GradeConverter}.
Observe como o uso da extensão de marcação {StaticResource} está a definir uma propriedade de outra, a extensão de marcação {Binding}, criando assim duas utilizações aninhadas de extensões de marcação. O interno é avaliado primeiro, para que o recurso seja obtido primeiro e possa ser usado como um valor. Este mesmo exemplo também é mostrado na extensão de marcação {Binding}.
Suporte a ferramentas de tempo de design para extensão de marcação {StaticResource}
O Microsoft Visual Studio pode incluir possíveis valores de chave nos menus suspensos do Microsoft IntelliSense quando se utiliza a extensão de marcação {StaticResource} numa página XAML. Por exemplo, assim que você digitar "{StaticResource", qualquer uma das chaves de recurso do escopo de pesquisa atual será exibida nas listas pendentes do IntelliSense. Além dos recursos típicos que você teria no nível da página (FrameworkElement.Resources) e no nível do aplicativo (Application.Resources), você também vê recursos de tema XAML e recursos de quaisquer extensões que seu projeto esteja usando.
Assim que uma chave de recurso existir como parte de qualquer uso de {StaticResource}, a funcionalidade Ir para Definição (F12) pode resolver esse recurso e mostrar o dicionário onde ele está definido. Para os recursos do tema, isso vai para generic.xaml para tempo de design.
Tópicos relacionados
Windows developer