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
- Effettuare il download di un file via FTP con la libreria FluentFTP di .NET
- Debug di app .NET tramite snapshot con Application Insight
- Utilizzare le Fullscreen API di HTML5 in IE11
- Proteggere l'accesso ad una Azure Web e API App tramite Google
- Utilizzare .NET Core con le Azure Function
- Effettuare il redirect da HTTP a HTTPS con la Azure CDN
- Creare un package MTS con uno script ASP
- Autenticazione con Minimal API di ASP.NET Core 6
- Routing HTTP con i proxy delle Azure Function
- Convidere una share di rete tra VM di Azure