扩展了所有WPF Treeview项目

时间:2010-07-13 09:18:30

标签: wpf treeview c#-4.0

我正在尝试遍历我的Treeview,扩展所有节点但是在运行时它会遇到InvalidCastException;

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

我的代码;

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

有什么想法吗?我想从一个按钮开始。

3 个答案:

答案 0 :(得分:13)

只需添加此款式

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

代码请通过此链接可能这可以帮助你

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

答案 1 :(得分:4)

我找到了一个“Hackish”解决方案。 它不涉及继承,如建议的解决方案here(由 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));
                }
            }
        }
    }

我的解决方案基于this

答案 2 :(得分:0)

Bag of tricks有一个名为“TreeView Expand”的演示,它有一个树形视图,展开全部并折叠所有按钮(还有一些)