我使用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;
}
我发现了这个错误并改正了它,下面是这个建议的工作方法:
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;
}
我在第一个方法中犯的错误是我没有将父元素本身添加到返回列表中。