2015-03-13 67 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屬性