尝试创建递归方法以按层次顺序列出逻辑依赖项

时间:2013-04-27 13:05:51

标签: c# wpf dependencyobject visualtreehelper logical-tree

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

1 个答案:

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

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