gpt4 book ai didi

c# - 如何将 WPF TreeView 的所有元素作为列表获取?

转载 作者:行者123 更新时间:2023-11-30 22:23:26 25 4
gpt4 key购买 nike

我需要以普通列表的形式访问 TreeView 的节点(就像展开所有节点一样),以便能够按 Shift 键进行多选。有办法实现吗?

谢谢

最佳答案

这里有一个方法可以检索 TreeView 中的所有 TreeViewItems。请注意,这是一种非常昂贵的运行方法,因为它必须展开所有 TreeViewItems 节点并每次执行 updateLayout。由于 TreeViewItems 仅在展开父节点时创建,因此没有其他方法可以做到这一点。

如果你只需要已经打开的节点列表,你可以去掉扩展它们的代码,这样会便宜很多。

也许您应该尝试寻找另一种方法来管理多选。话虽如此,这是方法:

    public static List<TreeViewItem> FindTreeViewItems(this Visual @this)
{
if (@this == null)
return null;

var result = new List<TreeViewItem>();

var frameworkElement = @this as FrameworkElement;
if (frameworkElement != null)
{
frameworkElement.ApplyTemplate();
}

Visual child = null;
for (int i = 0, count = VisualTreeHelper.GetChildrenCount(@this); i < count; i++)
{
child = VisualTreeHelper.GetChild(@this, i) as Visual;

var treeViewItem = child as TreeViewItem;
if (treeViewItem != null)
{
result.Add(treeViewItem);
if (!treeViewItem.IsExpanded)
{
treeViewItem.IsExpanded = true;
treeViewItem.UpdateLayout();
}
}
foreach (var childTreeViewItem in FindTreeViewItems(child))
{
result.Add(childTreeViewItem);
}
}
return result;
}

关于c# - 如何将 WPF TreeView 的所有元素作为列表获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13379058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com