2010-07-13 101 views
3

我试图遍历我的Treeview,展开所有节点,但它运行时运行到一个InvalidCastException;扩展所有WPF Treeview项目

无法将类型为“System.Data.DataRowView”的对象转换为键入“System.Windows.Controls.TreeViewItem”。

我的代码;

foreach (TreeViewItem treeitem in thetreeView.Items) 
{ 
    treeitem.IsExpanded = true; 
} 

任何想法?我想从一个按钮开始。

回答

13

只需添加这种风格

<TreeView.ItemContainerStyle> 
    <Style TargetType="TreeViewItem"> 
     <Setter Property="IsExpanded" Value="True" /> 
    </Style> 
</TreeView.ItemContainerStyle> 

代码,请通过这个链接可能是这可以帮助ü

http://bea.stollnitz.com/blog/?p=55

+1

虽然我想这待办事项在运行时,树视图的初始状态应该被关闭。我的想法是有一个崩溃/展开所有按钮。 – wonea 2010-07-13 09:29:11

+0

因为请阅读这篇文章与例 http://bea.stollnitz.com/blog/?p=55 – 2010-07-13 09:30:47

+0

同意。比衣的帖子涵盖了这个基本面。 – 2010-07-13 09:58:29

0

Bag of tricks有一个叫做“树视图展开”具有树演示查看全部展开并折叠所有按钮(以及更多)

4

我发现了一个“黑客”解决方案。 它不参与继承类的解决方案建议here(由基肖尔·库马尔

我添加了两个按钮 - “关闭全部”和“全部展开”。

代码背后:

private void btnCollapseAll_Click(object sender, RoutedEventArgs e) 
    { 
     foreach (var item in treeView.Items) 
     { 
      DependencyObject dObject = treeView.ItemContainerGenerator.ContainerFromItem(item); 
      CollapseTreeviewItems(((TreeViewItem)dObject)); 
     } 
    } 

    private void btnExpandAll_Click(object sender, RoutedEventArgs e) 
    { 
     foreach (var item in treeView.Items) 
     { 
      DependencyObject dObject = treeView.ItemContainerGenerator.ContainerFromItem(item); 
      ((TreeViewItem)dObject).ExpandSubtree(); 
     } 
    } 

    private void CollapseTreeviewItems(TreeViewItem Item) 
    { 
     Item.IsExpanded = false; 

     foreach (var item in Item.Items) 
     { 
      DependencyObject dObject = treeView.ItemContainerGenerator.ContainerFromItem(item); 

      if (dObject != null) 
      { 
       ((TreeViewItem)dObject).IsExpanded = false; 

       if (((TreeViewItem)dObject).HasItems) 
       { 
        CollapseTreeviewItems(((TreeViewItem)dObject)); 
       } 
      } 
     } 
    } 

我的解决方案是基于this