【问题标题】:Get all logical children获取所有逻辑孩子
【发布时间】:2015-05-16 04:30:50
【问题描述】:

我试图在我的视图中获取所有逻辑子项(用户控件)。我从根元素开始,遍历逻辑树,一切都按预期工作,但是,我的几个子控件是 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);
            }
        }
    }

【问题讨论】:

    标签: wpf wpf-controls


    【解决方案1】:

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

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

    VisualTreeHelper 有一个GetChild 方法和一个ChildCount 属性,您可以使用它来遍历ItemsControls 的可视子项

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-19
      • 2018-01-29
      • 2011-11-10
      • 1970-01-01
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      • 2022-08-10
      相关资源
      最近更新 更多