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

C# TreeView循环设置SelectedNode时选中项被覆盖问题

问题原因

TreeView默认是单选模式,SelectedNode是单选场景下的属性,每次给该属性赋值时,控件会自动清除所有已有节点的选中状态,仅保留当前赋值的节点为选中态。
你的代码第一次循环给SelectedNode赋值为值"5"对应的节点,此时"5"节点选中;第二次循环给SelectedNode赋值为值"2"对应的节点时,控件自动清除了"5"的选中状态,最终仅"2"节点保留选中。

多节点同时选中的实现方案

按以下两步修改即可:

  • 开启TreeView的多选模式:将控件的SelectionMode属性设置为TreeViewSelectionMode.Multiple,既可以在XAML界面配置中设置,也可以在后台代码中赋值。
  • 替换选中逻辑,操作多选专属的选中节点集合:开启多选后不要再使用SelectedNode属性赋值,改为调用SelectedNodes集合的Add方法,逐个将匹配到的节点加入选中集合即可,该操作不会清除已有的选中状态。

修正后的完整代码如下:

// 初始化时开启多选
TreeViewYear.SelectionMode = TreeViewSelectionMode.Multiple;
// 清空历史选中状态,避免残留无效选中项
TreeViewYear.SelectedNodes.Clear();

foreach (MyClass info in data)
{
    // 用内置方法简化空值判断
    if (!string.IsNullOrEmpty(info.year))
    {
        var matchNode = TreeViewYear.RootNodes[0].Children
            .FirstOrDefault(x => x.Content?.ToString() == info.year);
        // 匹配到节点才加入选中集合,避免空引用报错
        if (matchNode != null)
        {
            TreeViewYear.SelectedNodes.Add(matchNode);
        }
    }
}

注意事项

  • 多选模式下SelectedNode属性仅会返回选中集合里的第一个节点,对其赋值依然会清空所有其他选中项,请勿在多选场景使用该属性修改选中状态。
  • 若需要取消某个节点的选中状态,直接调用SelectedNodes.Remove(目标节点)即可。

内容的提问来源于stack exchange,提问作者Marco Oliveira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:24:15