Alcune applicazioni WPF possono richiedere di dover generare contenuti in modo dinamico, in base a dati provenienti dalle più disparate fonti, tipo XML o trasformazioni XSLT. Normalmente è possibile creare controlli e pannelli da codice, ma questa pratica non è molto comoda se si devono creare layout complessi. Risulta più comodo preparare del codice XAML a runtime, mediante un template, e una volta preparato il markup occorre parserizzarlo e crearne un albero di oggetti.
La classe XamlReader (namespace System.Windows.Markup) dispone di un metodo statico in grado di eseguire questa operazione. Ecco un semplice esempio d'utilizzo che crea una TextBlock:
using (XmlReader reader = XmlReader.Create(new StringReader("<TextBlock Text=\"Testo\" xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" />")))
{
tb = (TextBlock)XamlReader.Load(reader);
}E' importante ricordare il namespace, perché il parser è un motore che sta al di sopra di WPF e può essere usato anche per altri scopi. Inoltre va sottolineato che le performance di questa tecnica non sono eccelse, perché il processamento del markup è dispendioso e differisce dal BAML creato in fase di compilazione, più ottimizzato per il caricamento a runtime. In caso di tempi lunghi, è possibile sfruttare il metodo LoadAsync che esegue l'operazione in asincrono e l'evento LoadCompleted per conoscere quando ha terminato.
Contrariamente, è possibile generare markup XAML da qualsiasi oggetto utilizzando la classe XamlWriter. Di seguito l'operazione contraria all'esempio precedente.
TextBlock tb = new TextBlock();
tb.Text = "Testo";
string xaml = XamlWriter.Save(tb);- Tracing in Windows Communication Foundation
- #28 - Recuperare tutti gli oggetti di un certo tipo di una pagina ASP.NET con LINQ
- Spettro audio con WPF
- Service Pack 1 per Expression Blend
- #15 - Accedere al DOM di una pagina HTML da Silverlight 2.0
- Slide e demo della mia sessione ai Community Days online
- #43 - Valutare condizioni in un activity personalizzata di WF
- Com'è fatto il formato BAML di WPF?
- #15 - Validare i dati con i ValidationRule
- Expression Blend 2 September Preview
- #34 - Verificare che tutti gli oggetti in una lista soddisfino una condizione con la clausola All di LINQ
- SP1 per il .NET Framework 2.0 e 3.0
Esprimi il tuo giudizio su questo script:
Per procedere devi essere autenticato.
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.





Stampa
Download 


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!
