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
- #jquery UI 1.8.9: bug fix per Accordion, Datepicker, Draggable, Sortable e Tabs. download da http://u.aspitalia.com/q9
- Nuova CTP di ATLAS: ASP.NET e AJAX sempre più integrati
- Creare agenti AI con Azure AI Foundry
- nuovi servizi A8 (8 core+56 GB RAM) e A9 (16+112) per #azure, con 40 Gbit/s di banda https://aspit.co/art
- Percorsi relativi in pagine e user control ASP.NET
- Creare una cache temporanea in #javascript di @morwalpiz
- Generare un grafico a barre utilizzando il canvas e la libreria Chart.js
- FastCGI Extension for IIS6.0 in RTM


