Winforms – 如何在ListView控件中交替行的颜色?

使用C#Winforms(3.5)。

是否可以将行颜色设置为在列表视图中自动交替?

或者,每次将新行添加到列表视图时,是否需要手动设置行颜色?

根据MSDN文章,手动方法如下所示:

//alternate row color if (i % 2 == 0) { lvi.BackColor = Color.LightBlue; } else { lvi.BackColor = Color.Beige; } 

我担心这是Winforms的唯一方法。 XAML允许通过使用样式。

将ListView OwnerDraw属性设置为true,然后实现DrawItem处理程序:

  private void listView_DrawItem(object sender, DrawListViewItemEventArgs e) { e.DrawDefault = true; if ((e.ItemIndex%2) == 1) { e.Item.BackColor = Color.FromArgb(230, 230, 255); e.Item.UseItemStyleForSubItems = true; } } 

这个例子很简单,你可以改进它。

据我所知,WPF允许使用在任何控件上设置样式但是在winforms中我担心这可能是唯一的方法。

您还可以利用所有者绘图,而不是显式设置属性。 所有者绘图不易受项目重新排序的影响。

以下是如何在Better ListView (提供免费和扩展版本的第三方组件)中执行此操作 – 它只需处理DrawItemBackground事件:

 private void ListViewOnDrawItemBackground(object sender, BetterListViewDrawItemBackgroundEventArgs eventArgs) { if ((eventArgs.Item.Index & 1) == 1) { eventArgs.Graphics.FillRectangle(Brushes.AliceBlue, eventArgs.ItemBounds.BoundsOuter); } } 

结果:

在此处输入图像描述

将ListView OwnerDraw属性设置为true,然后实现DrawItem处理程序。 看看这里: Winforms – 如何在ListView控件中交替行的颜色?

  for (int i = 0; i <= listView.Items.Count - 1; i = (i + 2)) { listView.Items[i].BackColor = Color.Gainsboro; } 

在属性菜单中设置主背景,然后使用此代码设置备用颜色。