【问题标题】:Remove space between left ListView border and column items删除左侧 ListView 边框和列项之间的空间
【发布时间】:2016-11-23 14:21:09
【问题描述】:

我为第一个ListView 列的一些项目上色了

foreach (ListViewItem lvi in listView.Items)
{
    lvi.UseItemStyleForSubItems = false;

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

并尝试消除左侧ListView 边框和列项之间的轮廓间隙。

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

【问题讨论】:

标签: c# winforms listview listviewitem


【解决方案1】:

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

【讨论】: