Попытка создать рекурсивный метод для перечисления логических зависимостей в иерархическом порядке
Я использовал 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;
}
Ошибка, которую я сделал в своем первом методе, заключалась в том, что я не добавил самого родителя в возвращаемый список.