WPF - Как найти объект, содержащийся в другом объекте? - PullRequest
1 голос
/ 01 февраля 2011

У меня есть TabControl в окне и несколько элементов вкладки в элементе управления. Как мне найти все элементы управления TextBox, содержащиеся в одной из вкладок?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 01 февраля 2011

Вы должны прочитать это .

1 голос
/ 01 февраля 2011

Примерно так:

public static IEnumerable<T> FindDescendants<T>(DependencyObject obj, Predicate<T> condition) where T : DependencyObject
{
    List<T> result = new List<T>();

    for (var i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
    {
        var child = VisualTreeHelper.GetChild(obj, i);

        var candidate = child as T;
        if (candidate != null)
        {
            if (condition(candidate))
            {
                result.Add(candidate);
            }
        }

        foreach (var desc in FindDescendants(child, condition))
        {
            result.Add(desc);
        }
    }

    return result;
}

А в случае нахождения всех текстовых полей в элементе табуляции вызов метода будет выглядеть так:

var allTextBoxes = FindDescendants<TextBox>(myTabItem, e => true);
0 голосов
/ 01 февраля 2011

Вы можете использовать этот код и изменить его на тип соответствия вместо имени.

...