2015-03-13 66 views
0

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

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

如果你想获得包含在儿童DataTemplates中的视觉控件,你需要看看视觉树,而不是逻辑树。

VisualTreeHelperGetChild方法,你可以通过使用你的ItemsControls

视觉孩子来迭代 ChildCount属性