可变的ListView项背景颜色

8

如何使ListView控件的背景颜色像WinAmp一样随着每个项目变化而变化,并更改列标题颜色?

http://i.stack.imgur.com/30pQy.png

如果您仔细观察,您会发现第一个项目是深灰色,第二个项目是黑色,依此类推。


恭喜你的播放列表 :) - Ast
5个回答

13
你可以设置ListViewItem.BackColor属性,但必须手动为每个交替行执行此操作。或者,你可以使用DataGridView,它具有一个AlternateRowStyle属性,可以自动执行此操作 - 虽然你需要将行绑定到某种集合中,这是另一个话题。
对于简单情况:
foreach (ListViewItem item in listView1.Items)
{
    item.BackColor = item.Index % 2 == 0 ? Color.Red : Color.Black;
}

1
如果我们想要绘制一个空列表视图,应该怎么做? - SurajSing

2

在列表框上处理DrawItem事件,并将DrawMode设置为OwnerDrawVariableDrawItemEventArgs提供了一个BackColor属性,可以根据索引(也在参数中)设置其值。


0

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

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

0
for (int index = 0; index <= ListView1.Items.Count; index++) 
{
    if (index % 2 == 0) 
    {
        ListView1.Items(index).BackColor = Color.LightGray;
    }

}

在你的代码中,首先所有的项目都将被涂上单一颜色,之后其中一半会被重新涂色。我想这并不是很有效率。所以最好一次性将它们涂上,即只涂一次。 - abatishchev
是的!我同意...只是我找不到ListView中的Item Add事件... Item Paint和Sub Item Paint事件似乎没有触发... - Ranhiru Jude Cooray

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

您可以在添加项目后调用此方法。或者直接在添加时使用它。


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