C# 不同的ListView项目背景颜色

C# 不同的ListView项目背景颜色,c#,listview,C#,Listview,如何使ListView控件项的背景颜色因项而异(如WinAmp中的),同时更改列标题颜色 如果仔细观察,可以看到第一个项目为深灰色,第二个项目为黑色,依此类推。您可以设置ListViewItem.BackColor属性,但是必须手动为每个交替行设置此属性。或者,您可以使用一个DataGridView,它有一个AlternateRowStyle属性,可以自动执行此操作,尽管您需要在一个排序集合中对行进行数据绑定,而排序集合是一个完全不同的主题 对于简单的情况: foreach (ListView

如何使ListView控件项的背景颜色因项而异(如WinAmp中的),同时更改列标题颜色


如果仔细观察,可以看到第一个项目为深灰色,第二个项目为黑色,依此类推。

您可以设置
ListViewItem.BackColor
属性,但是必须手动为每个交替行设置此属性。或者,您可以使用一个
DataGridView
,它有一个
AlternateRowStyle
属性,可以自动执行此操作,尽管您需要在一个排序集合中对行进行数据绑定,而排序集合是一个完全不同的主题

对于简单的情况:

foreach (ListViewItem item in listView1.Items)
{
    item.BackColor = item.Index % 2 == 0 ? Color.Red : Color.Black;
}

我认为您在循环中添加行(子项)?如果是这样,请使用循环计数器来确定您想要的颜色

string[] strings = new string[]{"dild", "dingo"};
int i = 0;
foreach (var item in strings)
{
    Color color = i++ % 2 == 0 ? Color.LightBlue :  Color.LightCyan;
    ListViewItem lv = listView1.Items.Add(item);
    lv.SubItems[0].BackColor = color;
}
for(int index=0;index

您可以在添加项目后调用此方法。或者在添加时直接使用此方法处理列表框上的
DrawItem
事件,并将
DrawMode
设置为
OwnerDrawVariable

DrawItemEventArgs
提供了一个
BackColor
属性,可以根据索引(也在arg中)进行设置.

在您的代码中,首先所有项目都将以单色绘制,然后-其中1/2将被重新绘制。我想这不是很有效。因此最好在add上绘制它们,即只绘制一次。是的!我同意…只是我在ListView中找不到Item add的事件…Item paint和Sub Item paint事件似乎不会激发。。…如果要绘制空列表视图,我们应该怎么做?祝贺播放列表:)
for (int index = 0; index <= ListView1.Items.Count; index++) 
{
    if (index % 2 == 0) 
    {
        ListView1.Items(index).BackColor = Color.LightGray;
    }

}
private static void RepaintListView(ListView lw)
{
    var colored = false;
    foreach (ListViewItem item in lw.Items)
    {
        item.BackColor = colored ? Color.LightBlue : Color.White;
        colored = !colored;
    }
}