Поиск элементов управления одного типа - PullRequest
0 голосов
/ 28 июня 2010

У кого-нибудь есть хороший способ найти ВСЕ элементы управления внутри объекта того же типа?Вот мой сценарий, у меня есть элемент управления вкладками, и в каждом элементе управления вкладками существует пользовательский элемент управления (ВСЕ из которых соответствуют одному базовому типу, например, MyBaseClassControl).Я хочу быть в состоянии найти этот пользовательский элемент управления БЕЗ использования метода control.FindName ("controlName"), скорее я хотел бы получить дескриптор элемента управления по типу (например, базовый класс).Класс VisualTreeHelper, кажется, ничего не делает для меня, поскольку он возвращает только нативные объекты Silverlight.

1 Ответ

0 голосов
/ 28 июня 2010

Учитывая это:

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>();
...