2010-11-23 3 views
0

Sur une page Silverlight, il existe un certain nombre d'instances d'un contrôle personnalisé. Je peux facilement obtenir une instance de contrôle personnalisé par son nom:Comment obtenir une liste de toutes les instances d'un objet sur une page

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

Mais comment pourrais-je obtenir une liste de toutes les instances de ce contrôle personnalisé sur cette page?

Répondre

2

Ajouter cette classe à votre projet: -

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; 
     } 
    } 
} 

Maintenant, vous pouvez utiliser ce code: -

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

Awesome! Cela fonctionne parfaitement, merci! +1 – rem

1

Essayez quelque chose comme ça

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

Merci! +1 Pourriez-vous donner un conseil sur la façon d'obtenir des résultats dans une liste ? J'ai essayé "var ret = Enumerable.Range (.." puis "foreach (MyCustomControl sci in ret) {...}" mais la liste est vide – rem

+0

Ajouter .ToList() à la fin de la ligne de code J'ai déjà posté –

+0

Malheureusement, il est tout de même vide – rem

Questions connexes