c# - 在 C# 中刷新 TreeView 后展开选定的节点

标签 c# treeview

我有一个包含很多项目的 TreeView

当我展开一个项目及其子项并调用刷新方法后,展开的项目子项会折叠起来。

你能告诉我如何存储所选节点并在刷新后再次调用 Expand 方法吗...

我试过了:

 TreeNode selectedNode = new TreeNode();
 TreeNode selectedNode = SelectedTreeNode();  //method which takes selected node from TV
 RestoreFolderTreeWithLastSelectedItem(); //method which initialise treeview object
 //here I want to call Expand() method but it not exists to TreeNode.

对于 TreeView ,我使用了 Windows.Controls.treeView 命名空间 我是初学者... 谢谢

我用图片给你解释

我展开了所有项目: enter image description here

如果我按 F5 或调用刷新函数 (RestoreFolderTreeWithLastSelectedItem();),它们将像这样折叠:

enter image description here

而不是第一张图片...

最佳答案

我将它与 WinForms TreeView 一起使用。它在刷新之间保存节点展开状态:

// Save the path of the expanded tree branches
var savedExpansionState = treeView1.Nodes.GetExpansionState();

treeView1.BeginUpdate();

// TreeView is populated
// ...

// Once it is populated, we need to restore expanded nodes
treeView1.Nodes.SetExpansionState(savedExpansionState);

treeView1.EndUpdate();

实现代码如下:

public static class TreeViewExtensions
{
    public static List<string> GetExpansionState(this TreeNodeCollection nodes)
    {
        return nodes.Descendants()
                    .Where(n => n.IsExpanded)
                    .Select(n => n.FullPath)
                    .ToList();
    }

    public static void SetExpansionState(this TreeNodeCollection nodes, List<string> savedExpansionState)
    {
        foreach (var node in nodes.Descendants()
                                  .Where(n => savedExpansionState.Contains(n.FullPath)))
        {
            node.Expand();
        }
    }

    public static IEnumerable<TreeNode> Descendants(this TreeNodeCollection c)
    {
        foreach (var node in c.OfType<TreeNode>())
        {
            yield return node;

            foreach (var child in node.Nodes.Descendants())
            {
                yield return child;
            }
        }
    }
}

关于c# - 在 C# 中刷新 TreeView 后展开选定的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8308258/

相关文章:

javascript - 如何在包含展开和折叠的html页面中创建 TreeView

wpf - 根据可见性定义交替 TreeView 行的背景颜色

asp.net - TreeNode.Remove 不起作用!

java - 如何以树形 View 显示消息回复? Java 和 hibernate

c# - Web API发布返回415-不支持的媒体类型

c# - ComboBox onChange 后 TextBox 不显示值(WPF、C#、Binding)

c# - 以 IN 作为 List<int> 的数据集和查询

c# - 使用 C# 选择、复制和重新插入一系列 Excel 行

c# - 在 C# 中生成随机大写字母,同时检查每个字母只生成一对

c# - 找到 TreeViewItem 来放置数据