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 di StaticResource fa riferimento alla chiave di tale risorsa in ResourceDictionary.
Utilizzo attributo XAML
<object property="{StaticResource key}" .../>
Valori XAML
Termine | Descrizione |
---|---|
chiave | 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 risorse uniti usati per il fallback 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, vedere 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 esistono 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, vedere 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 restituisce un errore, il tentativo di crearne uno comporta una riduzione delle 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 oggetto 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 richiamando 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 informazioni, vedere Estensione di markup {ThemeResource}.
StaticResource è un'estensione di markup. Le estensioni di markup in genere vengono implementate quando per i valori dell'attributo devono essere utilizzati caratteri escape in modo che non vengano considerati come valori letterali o nomi di gestori e il requisito è più globale del semplice utilizzo di convertitori dei tipi su alcuni tipi o proprietà. Tutte le estensioni di markup in XAML usano i caratteri "{" e "}" nella sintassi degli attributi, vale a dire la convenzione in base a cui il processore XAML riconosce che l'attributo deve essere elaborato da un'estensione di markup.
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 2013 può includere i possibili valori chiave negli elenchi a discesa di 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 un utilizzo di {StaticResource}, la funzionalità fai 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.