得到所有逻辑孩子

时间:2015-03-13 15:46:40

标签: wpf wpf-controls

我试图在我的视图中获取所有逻辑子项(用户控件)。我从根元素开始,遍历逻辑树,一切都按预期工作,但是,我的几个子控件是ListBox等项目,它们是数据绑定的,并为子项使用数据模板,这些项目是没有在逻辑树中返回。

以下是我正在使用的代码:

private static void GetLogicalChildren<T>(DependencyObject parent, List<T> logicalCollection) where T : DependencyObject
    {
        IEnumerable children = LogicalTreeHelper.GetChildren(parent);

        foreach (object child in children)
        {
            if (child is DependencyObject)
            {
                DependencyObject depChild = child as DependencyObject;

                if (child is T)
                {
                    logicalCollection.Add(child as T);
                }

                GetLogicalChildren(depChild, logicalCollection);
            }
        }
    }

1 个答案:

答案 0 :(得分:2)

DataTemplates呈现的控件不在逻辑树中,它们位于可视树中。 DataTemplates绑定到的DataContext对象(可能是Viewmodels)位于Items属性的逻辑树中。

如果要获取子DataTemplates中包含的可视控件,则需要查看可视树,而不是逻辑树。

VisualTreeHelperGetChild方法和ChildCount属性,可用于迭代ItemsControls

的视觉子项