如何获取页面上对象的所有实例的列表

时间:2010-11-23 10:28:30

标签: c# wpf silverlight

在Silverlight页面上有许多自定义控件的实例。我可以通过名称轻松获取自定义控件的实例:

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

但是如何在此页面上获取此自定义控件的所有实例的列表?

2 个答案:

答案 0 :(得分: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 :(得分:1)

尝试这样的事情

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