Extensão de marcação StaticSource

Extensão de marcação StaticSource

[ Este artigo destina-se aos desenvolvedores do Windows 8.x e do Windows Phone 8.x que escrevem aplicativos do Windows Runtime. Se você estiver desenvolvendo para o Windows 10, consulte documentação mais recente ]

Fornece um valor para qualquer atributo XAML analisando uma referência a um recurso já definido. Recursos são definidos em um ResourceDictionary, e um uso de StaticResource faz referência à chave desse recurso no ResourceDictionary.

Uso do atributo XAML

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

Valores XAML

TermoDescrição

tecla

A chave para o recurso solicitado. Uma chave costuma ser atribuída pelo atributo x:Key em um recurso definido em um ResourceDictionary em XAML. Uma chave de recurso pode ser qualquer cadeia de caracteres definida na gramática de XamlName.

 

Comentários

StaticResource é uma técnica para obtenção de valores referentes a um atributo XAML definidos em outro lugar em um dicionário de recursos XAML. Os valores podem ser colocados em um dicionário de recursos porque sua finalidade de uso é a de serem compartilhados por diversos valores de propriedades, ou porque um dicionário de recursos XAML é usado como uma técnica de empacotamento ou fatoramento XAML. Um exemplo de técnica de empacotamento XAML é o dicionário temático de um controle. Outro exemplo são os dicionários de recursos mesclados usados para fallback de recursos.

StaticResource obtém um argumento, que especifica a chave para o recurso solicitado. Uma chave de recurso sempre é uma cadeia de caracteres no XAML de 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 StaticResource é resolvido para um item em um dicionário de recursos não estão descritas neste tópico. Isso depende de a referência e o recurso existirem ou não em um modelo, de os dicionários de recursos mesclados serem usados ou não e assim por diante. Para saber mais sobre como definir recursos e como usar adequadamente um ResourceDictionary, incluindo um exemplo de código, veja Referências de ResourceDictionary e recursos XAML.

Importante  

Um StaticResource não deve tentar fazer uma referência posterior a um recurso que é definido lexicalmente mais fundo no arquivo XAML. Não é possível fazer isso. Mesmo se a referência de encaminhamento não falhar, tentar fazer uma acarreta uma penalidade no desempenho. Para obter melhores resultados, ajuste a composição dos seus dicionários de recursos de maneira que seja possível evitar referências de encaminhamento.

 

Tentar especificar um StaticResource para uma chave incapaz de resolver gera uma exceção de análise de XAML em tempo de execução. As ferramentas de design também podem apresentar avisos ou erros.

Na implementação do processador XAML do Tempo de Execução do Windows, não há uma representação de classe de suporte para a funcionalidade StaticResource. StaticResource é exclusivamente para ser usado em XAML. O equivalente mais próximo em código é usar a API de coleção de um ResourceDictionary, chamando, por exemplo, Contains ou TryGetValue.

ThemeResource é uma extensão de marcação semelhante que faz referências a recursos nomeados em outro local. A diferença é que ThemeResource tem a capacidade de retornar recursos diferentes, dependendo do tema do sistema que estiver ativo. Para obter mais informações, veja ThemeResource.

StaticResource é uma extensão de marcação. As extensões de marcação geralmente são implementadas quando é necessário efetuar um escape de valores de atributo para que sejam diferentes de valores literais ou nomes de manipulador 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 "}" na sintaxe de atributo, sendo esta a convenção pela qual um processador XAML reconhece que uma extensão de marcação deve processar o atributo.

Exemplo de uso {StaticResource}

Este exemplo de XAML foi obtido 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 com suporte em uma classe personalizada e cria-o como um recurso em ResourceDictionary. Para ser um recurso válido, esse elemento local:S2Formatter também deve ter um valor de atributo x:Key. O valor do atributo está definido como "GradeConverter".

O recurso é solicitado apenas um pouco mais no XAML, em que você vê {StaticResource GradeConverter}.

Observe como o uso de StaticResource está definindo uma propriedade de outra extensão de marcação Binding, por isso há dois usos de extensão de marcação aninhada aqui. A interna é avaliada primeiro, por isso o recurso é obtido primeiro e pode ser usado como um valor. Este mesmo exemplo também é mostrado em Binding.

Suporte de ferramentas de tempo de design para a extensão de marcação {StaticResource}

O Microsoft Visual Studio 2013 pode incluir valores chaves possíveis nos menus suspensos do Microsoft IntelliSense quando você usa a extensão de marcação {StaticResource} em uma página XAML. Por exemplo, assim que você digita "{StaticResource", as chaves de recurso do escopo de pesquisa são exibidas nos menus suspensos IntelliSense. Além dos recursos típicos, você estaria no nível da página (FrameworkElement.Resources) e no nível do aplicativo (Application.Resources), e também veria os recursos de tema, e recursos de qualquer extensão que seu projeto esteja usando.

Como uma chave de recurso existe como parte de qualquer uso de {StaticResource}, o recurso Ir para definição (F12) pode resolver esse recurso e mostrar a você o dicionário em que ele está definido. Para os recursos de tema, ele vai para generic.xaml do tempo de design.

Tópicos relacionados

Referências de ResourceDictionary e recursos XAML
ResourceDictionary
Atributo x:Key
ThemeResource

 

 

Mostrar:
© 2017 Microsoft