uwp
Risorse in UWP (StaticResource / ThemeResource) e ResourceDictionary
Ricerca…
introduzione
Nelle nuove applicazioni di Windows 10 ci sono molti modi per fare riferimento a una risorsa all'interno del codice XAML o nel codice sottostante. Prima di tutto devi dichiarare le risorse in qualche luogo accessibile. Il modo semplice è dichiarare un ResourceDictionary
nel contesto, diciamo nella pagina corrente.
1. Dizionario delle risorse
Snippet da MainPage.xaml
<Page x:Class="MyNewApp.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:MyNewApp" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Page.Resources> <!-- Creates a resource dictionary in the page context --> <ResourceDictionary> <!-- This is a solid color brush resource NOTE: Each resource inside a resource dictionary must have a key --> <SolidColorBrush x:Key="ColorRed">Red</SolidColorBrush> </ResourceDictionary> </Page.Resources> <!-- Using ThemeResource in here to access a resource already defined --> <Grid Background="{ThemeResource ColorRed}"> </Grid> </Page>
2. Risorse globali
I dizionari delle risorse sono accessibili solo all'interno del contesto in cui sono stati dichiarati, quindi se intendiamo fare riferimento a risorse dichiarate in un contesto di una pagina da un'altra pagina non verranno trovate. Quindi, se abbiamo bisogno di risorse globali da definire come quelle fornite con il framework, lo facciamo in App.xaml
Snippet da App.xaml
<Application x:Class="MyNewApp.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" RequestedTheme="Dark"> <Application.Resources> <ResourceDictionary> <SolidColorBrush x:Key="ColorRed">Red</SolidColorBrush> </ResourceDictionary> </Application.Resources> </Application>
In questo modo possiamo accedere ColorRed
risorsa colore ColorRed
da ColorRed
nella nostra app. Ma aspetta, non vogliamo infestare quel piccolo file con tutte le risorse della nostra app! Quindi facciamo i MergedDictionaries
3. Dizionari uniti
Quasi sempre le cose sono un po 'più complesse e per supportare la scalabilità dovremmo dividere le cose. Quindi possiamo definire vari file contenenti dizionari di risorse diverse, ovvero risorse per i temi dei controlli dell'interfaccia utente, risorse per i testi e così via, quindi li uniamo tutti insieme nel file App.xaml.
Snippet da App.xaml
<Application x:Class="MyNewApp.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" RequestedTheme="Dark"> <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="/Assets/Themes/GeneralStyles.xaml"/> <ResourceDictionary Source="/Assets/Themes/TemplatedControls.xaml"/> <ResourceDictionary Source="/Assets/Strings/Texts.xaml"/> <ResourceDictionary Source="/Assets/Strings/ErrorTexts.xaml"/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> </Application>
È possibile creare un nuovo file dizionario facendo clic con il tasto destro sulla cartella Asset [Aggiungi -> Nuovo elemento]
4. Accesso alle risorse
Ora dobbiamo accedere alle nostre risorse dichiarate, per fare ciò dal codice XAML usiamo {ThemeResource ResourceKey}
o {StaticResource ResourceKey}
to be continued later.