Silverlight MergedDictionaries

Silverlight 3 introduce la possibilità di creare file di risorse (Resource Dictionaries) e di richiamarli – includerli – all’interno degli user control o meglio ancora del generic.xaml, ovvero il file che permette di ridefinire i template degli user control. In questo articolo non voglio spiegarvi l’utilizzo del generic.xaml o dei temi di Silverlight, argomento lungo, complesso e ancora in evoluzione, ma voglio dare qualche suggerimento per risolvere un problema di grow up del file generic.xaml.

 

Generic.xaml

Come già detto in questo file vengono ridefiniti gli stili degli user control, sia quelli di base sia eventuali custom control creati ex novo o che ereditano da altri control. Per farlo è necessario dichiarare uno <Style…>…</Style> quindi assegnarli come attributo l’oggetto target.

Fino alla precedente versione di Silverlight (2) era necessario definire i ControlTemplate all’interno del generic.xaml, creando un file enorme nel caso in cui aveste molti controlli da ridefinire. Con la nuova versione (3) è invece possibile usare file dizionario esterni e richiamarli tramite il MergedDictionaries.

 

Merged Dictionaries

I merged dictionaries non sono altro che chiamate di inclusione di file esterni. La modalità più facile da applicare è quella di definire i Control Template in file esterni, magari uno per controllo, quindi dichiararli all’interno del generic.xaml: quindi vi troverete con le chiamate ai ResourceDictionaries e la definizione degli stili (Style). Alcuni appunti operativi:

  • i file di stile con i Control Template devono essere compilati come Resource e la voce Custom Tool (proprietà dello XAML) deve essere vuota.
  • ogni Control Template deve avere un nome (x:key) per essere richiamato dallo Style
  • nel file della classe ridefinita deve essere creata l’associazione con il generic.xaml inserendo nel costruttore questa assegnazione:
    DefaultStyleKey = typeof(nomeControl)

 

Come nell’esempio di seguito è necessario in Silverlight localizzare le risorse esterne insendo nell’URI l’assembly completo e il path, con prefisso component/, con questa struttura:

<ResourceDictionary Source="<assembly name>;component/<resource file name>" />

Che nell’esempio diventa:

<ResourceDictionary Source="/MyApplication1;component/CCThemes/MyCustomControlTemplate.xaml" />

In questo caso il nome dell’assembly completo è MyApplication1 mentre il template dl control è nella sottodirectory MyFullPath. La situazione delle directory di esempio è quindi la seguente:

  • RootApplicationFolder
    • Themes
      • generic.xaml
    • CCThemes
      • MyCustomControlTemplate.xaml
    • Page.xaml

Ponete molta attenzione a quello che scrivete in fase di sviluppo: purtroppo oggi non c’è modo di debuggare quello che scrivete nello generic.xaml o nei file dizionari. Vi darà sempre e solo un errore nell’inizializzazione dell’oggetto.

 

Sitografia

Alcuni spunti di studio per ottenere le basi di lettura dell’articolo o per approfondire.

Loading Facebook Comments ...

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *