You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.NET 6.0的WPF应用中遍历TreeView控件的所有元素?

WPF TreeView遍历实现方案

WPF的TreeView设计逻辑与VBA/WinForm的TreeView存在本质差异:VBA中TreeView的节点集合直接对应控件实例,通过Children属性访问子节点;而WPF的TreeView属于ItemsControl派生类,无论根节点还是子节点的集合都存储在Items属性中,不存在Children属性,这是你原有逻辑无法运行的核心原因。

根据你使用TreeView的两种场景,对应实现方案如下:

场景1:直接添加TreeViewItem控件使用

如果你是在XAML中硬编码<TreeViewItem>节点,或是在后台代码直接将TreeViewItem实例添加到TreeView的Items集合中,可以直接用以下和你VBA逻辑对应的写法实现遍历:

索引遍历写法(完全对应你的VBA逻辑)

// x对应你原来的父节点循环变量
for (int x = 0; x < TreeViewObject.Items.Count; x++)
{
    // 取出父节点实例
    TreeViewItem parentNode = (TreeViewItem)TreeViewObject.Items[x];
    // y对应你原来的子节点循环变量
    for (int y = 0; y < parentNode.Items.Count; y++)
    {
        TreeViewItem childNode = (TreeViewItem)parentNode.Items[y];
        // 输出子节点内容,Header属性对应VBA中节点的显示值
        MessageBox.Show(childNode.Header?.ToString());
    }
}

foreach简化写法

foreach (TreeViewItem parentNode in TreeViewObject.Items)
{
    MessageBox.Show($"父节点值:{parentNode.Header}");
    foreach (TreeViewItem childNode in parentNode.Items)
    {
        MessageBox.Show($"子节点值:{childNode.Header}");
    }
}

场景2:通过数据绑定使用TreeView(WPF推荐用法)

如果你是给TreeView的ItemsSource属性绑定了自定义的业务对象集合,那么Items中存储的是你的业务数据对象,而非TreeViewItem控件实例。这种场景下无需操作TreeView控件本身,直接遍历你绑定的原始数据源即可,性能更高也符合WPF的MVVM设计规范,示例如下:
假设你绑定的数据源结构如下:

// 自定义节点业务类
public class MyTreeNode
{
    public string NodeName { get; set; }
    public List<MyTreeNode> Children { get; set; }
}

// 绑定给TreeView的数据源
public List<MyTreeNode> TreeDataSource { get; set; }

遍历代码直接操作数据源即可:

foreach (var parentNode in TreeDataSource)
{
    MessageBox.Show(parentNode.NodeName);
    foreach (var childNode in parentNode.Children)
    {
        MessageBox.Show(childNode.NodeName);
    }
}

内容的提问来源于stack exchange,提问作者Avrigeanu Laurian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:27:03