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.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
I più letti di oggi
- Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
- Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
- Chiamare direttamente un numero di telefono con HTML5
- Richiamare programmaticamente le operazioni di aggiornamento, eliminazione e inserimento di FormView, DetailsView e GridView