2010-11-23 26 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){...}”,但列表为空 – rem 2010-11-23 11:32:53

+0

在代码行末尾添加.ToList()我之前发布了 – 2010-11-23 11:55:39

相关问题