Winforms - 如何在ListView控件中交替更改行的颜色?

8

使用C# Winforms(3.5)。

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

还是每次添加新行时都需要手动设置行颜色?

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

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

1
顺带一提,斑马线条纹可能会或可能不会根据这篇A List Apart文章使您的表格更易于阅读。http://www.alistapart.com/articles/zebrastripingdoesithelp/ - Timothy
+1 - 很棒的文章 @Timothy。我会选择斑马线条纹。 - John M
6个回答

8
将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;
        }
    }

    private void listView_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
    {
        e.DrawDefault = true;
    }

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

5

恐怕这是Winforms中唯一的方法。但是,通过使用样式,XAML可以实现这一点。


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

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

0
据我所知,WPF允许使用<Styles/>在任何控件上设置样式。但是在WinForms中,恐怕这可能是唯一的方法。

-1

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

以下是如何在Better ListView(一种提供免费和扩展版本的第三方组件)中实现此功能 - 只需处理DrawItemBackground事件:

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

结果:

enter image description here


-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接