使用C# Winforms(3.5)。
是否可以在列表视图中自动设置行颜色交替?
还是每次添加新行时都需要手动设置行颜色?
根据MSDN文章,手动方法如下:
//alternate row color
if (i % 2 == 0)
{
lvi.BackColor = Color.LightBlue;
}
else
{
lvi.BackColor = Color.Beige;
}
使用C# Winforms(3.5)。
是否可以在列表视图中自动设置行颜色交替?
还是每次添加新行时都需要手动设置行颜色?
根据MSDN文章,手动方法如下:
//alternate row color
if (i % 2 == 0)
{
lvi.BackColor = Color.LightBlue;
}
else
{
lvi.BackColor = Color.Beige;
}
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;
}
恐怕这是Winforms中唯一的方法。但是,通过使用样式,XAML可以实现这一点。
for (int i = 0; i <= listView.Items.Count - 1; i = (i + 2))
{
listView.Items[i].BackColor = Color.Gainsboro;
}
<Styles/>
在任何控件上设置样式。但是在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);
}
}
结果: