我有一个包含很多项目的 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
命名空间
我是初学者...
谢谢
我用图片给你解释
我展开了所有项目:
如果我按 F5 或调用刷新函数 (RestoreFolderTreeWithLastSelectedItem();),它们将像这样折叠:
而不是第一张图片...
最佳答案
我将它与 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/