查找相同类型的控件

时间:2010-06-28 16:16:47

标签: silverlight controls

有没有人有一个很好的方法来找到同一类型的对象中的所有控件?这是我的方案,我有一个选项卡控件,在每个选项卡控件中都存在一个用户控件(所有这些控件都匹配相同的基类型,例如MyBaseClassControl)。我希望能够找到用户控件而不必使用control.FindName(“controlName”)方法,而是希望按类型(例如基类)获得控件的句柄。 VisualTreeHelper类似乎对我没有任何作用,因为它只返回本机Silverlight对象。

1 个答案:

答案 0 :(得分:0)

鉴于此:

public static IEnumerable<DependencyObject> AllChildren(this DependencyObject root)
{
    var children = root.DirectChildren().ToList();
    return children.Union(children.SelectMany(o => o.AllChildren()));
}

public static IEnumerable<DependencyObject> DirectChildren(this DependencyObject parent)
{
    var childCount = VisualTreeHelper.GetChildrenCount(parent);
    for (var i = 0; i < childCount; i++)
        yield return System.Windows.Media.VisualTreeHelper.GetChild(parent, i);
}

你可以这样做:

myObj.AllChildren().OfType<MyBaseClassControl>();