删除左ListView边框和列项之间的空格

时间:2016-11-23 14:21:10

标签: c# winforms listview listviewitem

enter image description here

我通过

为第一个ListView列着色了几个项目
foreach (ListViewItem lvi in listView.Items)
{
    lvi.UseItemStyleForSubItems = false;

    lvi.SubItems[0].BackColor = Color.DarkMagenta;
}

并尝试摆脱左ListView边框与列项之间的轮廓差距。

设置listView.Padding无效,ColumnHeader类既没有BackColor属性也没有Margin属性,可以设置为零以下。

1 个答案:

答案 0 :(得分:2)

Owner-Drawing将让您根据需要绘制整个项目背景。

listView1.OwnerDraw = true;

这是一个简单的,最小的例子:

private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)
{
    using (Brush brush = new SolidBrush(
            (e.State.HasFlag(ListViewItemStates.Focused)) ? 
            SystemColors.Highlight : e.Item.BackColor))
        e.Graphics.FillRectangle(brush, e.Bounds);
    e.DrawText();
}

请注意,一旦您的所有者绘制了该项目,即使您只使用默认值,您也需要所有者绘制子项和标题:

private void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
    e.DrawDefault = true;
}

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