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

C# ListView行与列设置不同颜色问题求助

问题分析与解决方案

你遇到的问题核心是**UseItemStyleForSubItems属性的设置顺序错误**,默认情况下子项会继承父Item的样式,导致你设置的列背景色被行背景色覆盖。

问题根源

  1. UseItemStyleForSubItems默认值为true,这意味着所有子项会继承ListViewItem的样式(包括你设置的交替行背景色)。
  2. 你先修改了子项的BackColor,再设置UseItemStyleForSubItems = false,此时子项已经继承了Item的背景色,后续的列颜色设置不会生效。

修正后的代码

先禁用子项的样式继承,再修改指定列的背景色,同时保留交替行设置:

// 设置交替行背景色
foreach (ListViewItem item in listView.Items)
{
   item.BackColor = item.Index % 2 == 0 ? Color.FromArgb(70, 70, 70) : Color.FromArgb(61, 61, 61);
}

// 设置指定列背景色(注意顺序)
foreach (ListViewItem item in listView.Items)
{
   // 先禁用子项继承父Item样式
   item.UseItemStyleForSubItems = false;
   // 再设置指定子项的背景色
   item.SubItems[2].BackColor = Color.FromArgb(18, 64, 100);
   item.SubItems[9].BackColor = Color.FromArgb(105, 16, 38);
}

额外注意事项

  • 确认SubItems[2]和SubItems[9]的索引正确(ListView子项索引从0开始,首列对应SubItems[0]),索引越界会导致设置无效。
  • 如果ListView启用了虚拟模式(VirtualMode = true),需要在RetrieveVirtualItem事件中处理样式设置,而非直接遍历Items集合。

内容的提问来源于stack exchange,提问作者Hakan DOĞAN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 10:45:26