展开所有 WPF TreeView 的项

3

我试图遍历我的Treeview,展开所有节点,但是运行时遇到了一个InvalidCastException异常;

无法将类型为'System.Data.DataRowView'的对象强制转换为类型'System.Windows.Controls.TreeViewItem'。

我的代码如下;

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

有什么想法吗?我想从一个按钮触发它。

3个回答

14

只需添加此样式

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

请查看此链接的代码,也许这可以帮助您:

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


1
虽然我想在运行时完成这个操作,但 Treeview 的初始状态应该是关闭的。我的想法是添加一个折叠/展开所有按钮。 - wonea
请阅读此文章并查看示例: http://bea.stollnitz.com/blog/?p=55 - Kishore Kumar
同意。Bea的帖子涵盖了这方面的基础知识。 - Rob Perkins
是的,我看过那个。有点困惑,于是尝试从头开始编写代码。 - wonea

4
我已经找到了一个“Hackish”的解决方案。 它不涉及继承,如这里所建议的(由Kishore Kumar)。
我添加了两个按钮——“折叠全部”和“展开全部”。
后台代码:
    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));
                }
            }
        }
    }

我的解决方案基于这个

链接。


0

技巧宝典有一个名为“TreeView Expand”的演示,其中包含具有展开所有和折叠所有按钮(以及更多内容)的树形视图


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接