0

我使用了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;
}
4

1 回答 1

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;
}

我在第一种方法中犯的错误是我没有将父级本身添加到返回列表中。

于 2013-04-27T13:30:02.120 回答