2010-11-23 2 views
0

На странице Silverlight имеется несколько экземпляров настраиваемого элемента управления. Я могу легко получить экземпляр пользовательского элемента управления своим именем:Как получить список всех экземпляров объекта на странице

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

Но как я мог бы получить список всех экземпляров этого пользовательского элемента управления на этой странице?

ответ

2

Добавить этот класс в проект: -

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

Теперь вы можете использовать этот код: -

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

Попробуйте что-то вроде этого

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

Спасибо! +1 Не могли бы вы рассказать о том, как получить результаты в List из этого? Я пробовал «var ret = Enumerable.Range (..», а затем «foreach (MyCustomControl sci in ret) {...}», но List пуст – rem 2010-11-23 11:32:53

+0

Добавить .ToList() в конце строки кода Я размещал ранее – 2010-11-23 11:55:39

Смежные вопросы