Visto che Microsoft ancora non si decide a fornirci gli strumenti per sviluppare su Mobile le applicazioni Silverlight, che ne dite se ci facciamo un visualizzatore di Silverlight per Windows Mobile? Ho fatto il download di una libreria molto interessante opensource chiamata Silverlight.Mobile.Visualizers. Dopo averla smontata con Reflector, ho deciso di personalizzarla un pò usando come esempio il mio vecchio Htc Tytn. Ho fatto quindi una foto al mio MSPhone (microsoft Phone :-) ) e l'ho utilizzato come Skin del mio visualizer

Il problema (uno dei tanti) di far girare le applicazioni Silverlight su Mobile risiede nel fatto che esistono davvero molti device, molti browser e molte risoluzioni che complicano notevolmente la possibilità di fornire un comportamento uniforme della UI. Per questo motivo, tra l'altro, vedremo l'esempio girare su un visualizzatore con la skin del mio Htc e vi darò le indicazioni di come modificare eventualmente le cose a favore del vostro Device. La solution che vi propongo di scaricare da questo post consiste di due progetti., uno è il progetto della libreria silverlight disassemblata e ritoccata in base alle proprie esigenze, l'altro progetto è invece un progetto silverlight che utilizza il visualizer che viene costruito nel primo progetto.:

Concentriamoci sul secondo progetto, quello che contiee il vero e proprio controllo Silverlight. Come vediamo dal file SLControl.cs, ci sono 3 classi
- Skin
- DefaultSkin
- SlmVisualizer
così strutturate:

La classe SlmVisualizer a sua volta è strutturata così:

La classe Skin ha questa struttura su cui ci soffermeremo più avanti:

Le proprietà di Skin sono tutte delle DependencyProperties. Per chi volesse saperne di più sulle dependencyproperties
rimando a un mio articolo su Silvernight.it (Un blog tutto dedicato a Silverlight e XNA). Qui ci basti sapere che le dependencyproperties sono delle proprietà che permettono notevoli migliorie nelle performance di notifica e di registrazione, oltre a supportare alcune caratteristiche che si riscontrano in WPF quali il Binding dei Dati e l'applicazione degli Styles. Le DependencyProperties di Skin la fanno da padrone poichè rappresentano le caratteristiche che daranno il vero e proprio layout al nostro visualizer. Skin viene dichiarata abstract per costringere a definire un'altra specifica classe che sarà poi quella che contiene i valori attuali del visualizer. Nel mio caso alla proprietà source ho assegnato l'immagine del mio TyTN, avendo l'accortezza di 'giocare' con le posizioni in pixel dell'immagine rispetto all'orientamento e alla dimensione dello schermo. (nel mio caso funziona solo il primo caso nella dropdownlist di scelta.

Ed eccoci al vero e proprio controllo Silverlight. Vediamo lo XAML

Come vediamo la pagina XAML contiene solo un oggetto di tipo Skin (che viene istanziato attraverso il relativo namespace attraverso l'alias 'local') e una combobox che serve per poter scegliere il layout del device che ci interessa testare con la nostra applicazione. A questo punto il più è fatto in quanto basterà utilizzare il visualizer (che diventa una specie di placeholder Silverlight della nostra applicazione) nel secondo progetto.
Utilizzo del Visualizer
Nell'applicazione abbiamo una pagina chiamata SlmV.XAML contenente lo XAML necessario a visualizzare la pagina Page.XAML all'interno del Visualizaer stesso:

e finalmente, nella pagina Page, inseriamo il codice XAML per avviare l'applicazione vera e propria. Alla fine il risultato sarà questo:

sv.