我使用VisualTree
帮助器来获取窗口中的所有Visual,但有时某些控件未列在返回列表中。那是因为它们仍然没有渲染,据我所知,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;
}
答案 0 :(得分:0)
我发现错误并纠正了错误,以下是该提议的工作方法:
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;
}
我在第一种方法中犯的错误是我没有将父本身添加到返回列表中。