#50 - Caricare un oggetto XAML da file remoto in Silverlight 2.0
di Alessio Leoncini, in Silverlight 2.0, 28 maggio 2009
In Silverlight 2.0 è possibile creare a runtime l'istanza di un controllo elaborando un codice XAML. Il metodo Load della classe statica XamlReader accetta come parametro una stringa che può definire il markup di un controllo o anche di un UserControl complesso. Il codice XAML può essere definito sia nel codice come semplice variabile oppure può anche essere caricato da una risorsa remota.
Nell'esempio procediamo alla definizione del markup di un Button in un file button1.xaml, locato nella root del sito web che ospita l'applicazione.
<Button xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Cursor="Hand" Content="Pulsante1" />
Per la corretta parserizzazione, il controllo principale deve riportare i namespace relativi al markup XAML.
Nel codice si può procedere al caricamento del file con il metodo DownloadStringAsync della classe WebClient, poichè il contenuto del file può essere interpretato come semplice stringa:
Uri url = new Uri("/button1.xaml", UriKind.Relative); WebClient client = new WebClient(); client.DownloadStringCompleted += (object sender, DownloadStringCompletedEventArgs e) => { if (e.Error == null) { string xaml = e.Result; Button button1 = XamlReader.Load(xaml) as Button; LayoutRoot.Children.Add(button1); } }; client.DownloadStringAsync(url);
Come noto, il caricamento della risorsa avviene in modo asincrono; al termine dell'operazione, nel metodo gestore dell'evento DownloadStringCompleted, si può recuperare il markup del controllo attraverso la proprietà e.Result.
Una volta assegnata la stringa al metodo Load di XamlReader, viene restituita direttamente l'istanza del controllo principale definito, che può essere utilizzata nel modo tradizione.
Con questa modalità anche un webservice può eseguire le dovute elaborazioni e restituire markup di controlli già completi di informazioni.
Approfondimenti
-
.NET Framework 4.0 beta 2: Visual Studio 2010
-
#61 - Cambiare la posizione alle immagini di Deep Zoom in Silverlight 3.0
-
#65 - Specificare una proprietà come ContentProperty di un controllo Silverlight 3.0
-
#48 - Blue Style button
-
GDR2 per #silverlight3: fix a media e networking via @timheuer SDK aggiornato su http://u.aspitalia.com/ad
-
#109 - Effettuare il Binding in WPF di una query Entity Framework
-
#66 - ListBox style per Silverlight 3.0
-
Moonlight 2.0 in beta, con un po' di Silverlight 3.0 per Linux
-
#adonetdataservices v1.5 CTP 2 con supporto al #databinding per #wpf e #silverlight su http://u.aspitalia.com/ac
-
Comunicazione TCP tra Silverlight e WPF
-
Silverlight 4.0 beta

















Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.