Il concetto di risorsa è molto semplice, qualsiasi elemento in Silverlight può essere una risorsa. L'obbiettivo è quello di rendere tali elementi riutilizzabili all'interno dell'applicazione. Le risorse sono contenute all'interno di oggetti ResourceDictionary
, ovvero collezioni di tipo dizionario formate da coppie <chiave, valore>
(Key, Value), dove ogni elemento è composto da un oggetto (la risorsa) e da una chiave identificativa univoca.
Tutti i controlli, più l'oggetto Application
, espongono la proprietà Resources
di tipo ResourceDictionary
, quindi possono contenere risorse, questo permette di creare delle vere e proprie gerarchie di risorse. Per ottenere una risorsa sfruttiamo il Markup Extension StaticResource. Vediamo un esempio.
<StackPanel> <StackPanel.Resources> <LinearGradientBrush x:Key="myGradientBrush" StartPoint="0,0" EndPoint="1,1"> <GradientStop Color="#FF575757" /> <GradientStop Color="#FFCDCDCD" Offset="1" /> </LinearGradientBrush> </StackPanel.Resources> <TextBlock Text="Guida Silverlight" Foreground="{StaticResource myGradientBrush}" /> <TextBlock Text="HTML.IT" Foreground="{StaticResource myGradientBrush}" /> </StackPanel>
Nel precedente codice un oggetto LinearGradientBrush
viene creato come risorsa all'interno dello StackPanel e successivamente applicato come Foreground per entrambi i controlli TextBlock
.
Il livello di visibilità di una risorsa dipende da dove è stata definita all'interno dello XAML. Per esempio se nel precedente codice spostiamo la definizione della risorsa sotto i TextBlock, essa non sarà più visibile dai controlli, quindi a run-time sarà sollevata un'eccezione.
<StackPanel> <TextBlock Text="Guida Silverlight" Foreground="{StaticResource myGradientBrush}" /> <TextBlock Text="HTML.IT" Foreground="{StaticResource myGradientBrush}" /> <StackPanel.Resources> <LinearGradientBrush x:Key="myGradientBrush" StartPoint="0,0" EndPoint="1,1"> <GradientStop Color="#FF575757" /> <GradientStop Color="#FFCDCDCD" Offset="1" /> </LinearGradientBrush> </StackPanel.Resources> </StackPanel>
Le risorse possono essere definite all'interno dei controlli, a livello di applicazione oppure distribuiti in file separati.