Durante lo sviluppo di un'applicazione Silverlight, può capitare di avere la necessità di manipolare tutti gli elementi di un determinato tipo che appartengono all'albero dei controlli. Immaginiamo ad esempio di voler modificare programmaticamente lo stile applicato a tutti i TextBlock contenuti all'interno di uno StackPanel.
Nello script di oggi presentiamo un approccio che consente, partendo da un particolare FrameworkElement, di scorrere l'albero degli elementi e restituire una collezione di controlli di un particolare tipo, sfruttando una combinazione di Extension Methods, Generics e programmazione ricorsiva.
E' possibile quindi utilizzare questa soluzione per scorrere i discendenti di un particolare controllo, in maniera molto più semplice che attraverso le relative property di navigazione ( Children, Content, Items e così via). Inoltre, siccome il valore restituito è una collezione IEnumerable, è possibile combinarlo in un'espressione LINQ (ad esempio per disabilitare tutti i checkbox di un particolare pannello).
public static class Extensions { public static IEnumerable<T> GetChildren<T>(this FrameworkElement element) where T : FrameworkElement { int count = VisualTreeHelper.GetChildrenCount(element); for (int i = 0; i != count; ++i) { var child = VisualTreeHelper.GetChild(element, i) as FrameworkElement; if (child is T) yield return (T)child; var children = child.GetChildren<T>(); foreach (T grandchild in children) yield return grandchild; } } }
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
- Nuovi corsi ASP e ASP.NET dal 22 novembre a Lugo (RA)
- Microsoft Security Bulletin MS05-029
- Longhorn si chiamerà Windows Vista?
- Semplificare la gestione degli array in querystring in ASP.NET Core
- .NET Aspire per applicazioni distribuite
- Aggiungere un valore neutro ad una DropDownList con il DataSet
- Paginazione e chiavi multiple con il controllo GridView
- Utilizzare CORS con Azure Cosmos DB
- Scoprire le applicazioni senza la pagina di errore personalizzata con LINQ e Microsoft.Web.Administration
- Utilizzare App Streaming Install nella Universal Windows Platform