Condividi tramite


Estensione di markup {StaticResource}

Fornisce un valore per qualsiasi attributo XAML valutando un riferimento a una risorsa già definita. Le risorse vengono definite in un ResourceDictionary e un utilizzo StaticResource fa riferimento alla chiave di tale risorsa in ResourceDictionary.

Utilizzo degli attributi XAML

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

Valori XAML

Termine Description
key Chiave per la risorsa richiesta. Questa chiave viene inizialmente assegnata da ResourceDictionary. Una chiave di risorsa può essere qualsiasi stringa definita nella grammatica XamlName.

Osservazioni:

StaticResource è una tecnica per ottenere valori per un attributo XAML definito altrove in un dizionario risorse XAML. I valori possono essere inseriti in un dizionario risorse perché sono destinati a essere condivisi da più valori di proprietà o perché un dizionario risorse XAML viene usato come tecnica di creazione di pacchetti o fattorizzazione XAML. Un esempio di tecnica di creazione di pacchetti XAML è il dizionario dei temi per un controllo . Un altro esempio è costituito dai dizionari delle risorse combinati usati per il ripiego delle risorse.

StaticResource accetta un argomento, che specifica la chiave per la risorsa richiesta. Una chiave di risorsa è sempre una stringa in XAML di Windows Runtime. Per altre info su come viene inizialmente specificata la chiave di risorsa, vedi attributo x:Key.

Le regole in base alle quali un oggetto StaticResource viene risolto in un elemento in un dizionario risorse non sono descritte in questo argomento. Ciò dipende dal fatto che il riferimento e la risorsa esistano entrambi in un modello, indipendentemente dal fatto che vengano usati dizionari risorse uniti e così via. Per altre info su come definire le risorse e usare correttamente un ResourceDictionary, incluso il codice di esempio, vedi Riferimenti alle risorse ResourceDictionary e XAML.

Importante Un oggetto StaticResource non deve tentare di eseguire un riferimento in avanti a una risorsa definita in modo lessicale all'interno del file XAML. Il tentativo di eseguire questa operazione non è supportato. Anche se il riferimento in avanti non fallisce, il tentativo di crearlo comporta una penalità sulle prestazioni. Per ottenere risultati ottimali, modificare la composizione dei dizionari risorse in modo che i riferimenti in avanti vengano evitati.

Il tentativo di specificare un StaticResource su una chiave che non è in grado di risolvere genera un'eccezione di analisi XAML in fase di esecuzione. Gli strumenti di progettazione possono anche offrire avvisi o errori.

Nell'implementazione del processore XAML di Windows Runtime non esiste alcuna rappresentazione della classe di backup per la funzionalità StaticResource . StaticResource è esclusivamente per l'uso in XAML. L'equivalente più vicino nel codice consiste nell'usare l'API di raccolta di un oggetto ResourceDictionary, ad esempio chiamando Contains o TryGetValue.

L'estensione di markup {ThemeResource} è un'estensione di markup simile che fa riferimento alle risorse denominate in un'altra posizione. La differenza è che l'estensione di markup {ThemeResource} ha la possibilità di restituire risorse diverse a seconda del tema di sistema attivo. Per altre info, vedi Estensione di markup {ThemeResource}.

StaticResource è un'estensione di markup. Le estensioni di markup vengono in genere implementate quando è necessario che i valori degli attributi di escape siano diversi dai valori letterali o dai nomi dei gestori e il requisito è più globale rispetto all'inserimento di convertitori di tipi su determinati tipi o proprietà. Tutte le estensioni di markup in XAML usano i caratteri "{" e "}" nella sintassi degli attributi, ovvero la convenzione in base alla quale un processore XAML riconosce che un'estensione di markup deve elaborare l'attributo.

Esempio di utilizzo di {StaticResource}

Questo codice XAML di esempio è tratto dall'esempio di data binding 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> 

Questo particolare esempio crea un oggetto supportato da una classe personalizzata e lo crea come risorsa in un ResourceDictionary. Per essere una risorsa valida, questo local:S2Formatter elemento deve avere anche un valore di attributo x:Key . Il valore dell'attributo è impostato su "GradeConverter".

La risorsa viene quindi richiesta solo un po' più avanti nel codice XAML, dove viene visualizzato {StaticResource GradeConverter}.

Si noti che l'utilizzo dell'estensione di markup {StaticResource} imposta una proprietà di un'altra estensione di markup {Binding}, quindi qui sono disponibili due utilizzi di estensione di markup annidati. Il valore interno viene valutato per primo, in modo che la risorsa venga ottenuta per prima e possa essere usata come valore. Questo stesso esempio è illustrato anche nell'estensione di markup {Binding}.

Supporto degli strumenti in fase di progettazione per l'estensione di markup {StaticResource}

Microsoft Visual Studio può includere i possibili valori chiave negli elenchi a discesa Microsoft IntelliSense quando si usa l'estensione di markup {StaticResource} in una pagina XAML. Ad esempio, non appena si digita "{StaticResource", le chiavi di risorsa dell'ambito di ricerca corrente vengono visualizzate negli elenchi a discesa IntelliSense. Oltre alle risorse tipiche disponibili a livello di pagina (FrameworkElement.Resources) e a livello di app (Application.Resources), vengono visualizzate anche le risorse del tema XAML e le risorse di qualsiasi estensione usata dal progetto.

Una volta presente una chiave di risorsa come parte di qualsiasi utilizzo di {StaticResource} , la funzionalità Vai a definizione (F12) può risolvere tale risorsa e visualizzare il dizionario in cui è definito. Per le risorse del tema, questo passa a generic.xaml per la fase di progettazione.