Попытка создать рекурсивный метод для перечисления логических зависимостей в иерархическом порядке

Я использовал VisualTree помощник, чтобы получить все визуальные элементы в моем окне, но иногда некоторые определенные элементы управления не отображаются в возвращаемом списке. Это потому, что они до сих пор не отображаются, насколько я знаю, VisualTree Перечисление поможет, только если элементы управления уже отрисованы.

Теперь я пытаюсь написать простой рекурсивный метод, который вместо этого перечислит все логические объекты в окне, чтобы я мог работать с ними еще до их рендеринга.

Итак, вот моя первая попытка создать что-то подобное для логического дерева:

public static List<DependencyObject> ListLogical( DependencyObject parent )
{
    var depList = new List<DependencyObject>();
    foreach ( var child in LogicalTreeHelper.GetChildren( parent ).OfType<DependencyObject>() )
    {
        depList.AddRange( ListLogical( child ) );
    }
    return depList;
}

1 ответ

Решение

Я нашел ошибку и исправил ее, вот рабочий метод для этого предложения:

public static List<DependencyObject> ListLogical( DependencyObject parent)
{
    var depList = new List<DependencyObject>
    {
        parent
    };
    foreach ( var child in LogicalTreeHelper.GetChildren( parent ).OfType<DependencyObject>() )
    {
        depList.AddRange( ListLogical( child ) );
    }
    return depList;
}

Ошибка, которую я сделал в своем первом методе, заключалась в том, что я не добавил самого родителя в возвращаемый список.

Другие вопросы по тегам