2010-11-23 3 views
0

Auf einer Silverlight-Seite gibt es eine Reihe von Instanzen eines benutzerdefinierten Steuerelements. Ich kann einfach eine Instanz des benutzerdefinierten Steuerelements durch seinen Namen bekommen:So erhalten Sie eine Liste aller Instanzen eines Objekts auf einer Seite

MyCustomControl mcc = (MyCustomControl)this.FindName(namestring); 

Aber wie konnte ich eine Liste aller Instanzen dieses benutzerdefinierten Steuerelement auf dieser Seite bekommen?

Antwort

2

Fügen Sie diese Klasse zu einem Projekt: -

public static class VisualTreeEnumeration 
{ 
    public static IEnumerable<DependencyObject> Descendents(this DependencyObject root) 
    { 
     int count = VisualTreeHelper.GetChildrenCount(root); 
     for (int i = 0; i < count; i++) 
     { 
      var child = VisualTreeHelper.GetChild(root, i); 
      yield return child; 
      foreach (var descendent in Descendents(child)) 
       yield return descendent; 
     } 
    } 
} 

Jetzt können Sie diesen Code verwenden: -

List<MyCustomControl> = this.Descendents().OfType<MyCustomControl>().ToList(); 
+0

Awesome! Es funktioniert perfekt. Danke! +1 – rem

1

Probieren Sie etwas wie dieses

Enumerable.Range(0, VisualTreeHelper.GetChildrenCount(this)) 
    .Select(i => VisualTreeHelper.GetChild(this, i)) 
    .Where(c => c is MyUserControl); 
+0

Thank you! +1 Könnten Sie bitte einen Tipp geben, wie Sie Ergebnisse zu einer Liste erhalten? Ich habe versucht "var ret = Enumerable.Range (.." und dann "foreach (MyCustomControl sci in ret) {...}" aber die Liste ist leer – rem

+0

Add .ToList() am Ende der Zeile des Codes Ich postete früher –

+0

Leider ist es alle gleich leer – rem

Verwandte Themen