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

时间:2010-05-19 15:05:16

标签: c# winforms .net-3.5 listview

使用C#Winforms(3.5)。

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

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

基于MSDN文章,手动方法如下所示:

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

6 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

将ListView OwnerDraw属性设置为true,然后实现DrawItem处理程序。看看这里:Winforms - How to alternate the color of rows in a ListView control?

答案 4 :(得分:0)

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

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

答案 5 :(得分:-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