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
- Formati per l'impostazione del colore in CSS3
- Eseguire una chiamata AJAX per inviare dati al server in Angular 2
- Impostare un riferimento ad una entity collegata tramite foreign key
- la Call For Papert per #netconfit è aperta!invia la tua sessione da https://aspit.co/netconfit-20 puoi parlare di #net5, #aspnet5, #efcore5, #CSharp9 e tutto quello che ruota intorno a #dotnet.