C#:Listview LargeIcon视图:消除行之间的空间

时间:2018-07-10 15:41:23

标签: c# winforms listview ownerdrawn

我正在为特定目的/应用构建自定义ListView控件,其中我必须显示图库。为此,我使用所有者绘制过程在ListView中手动绘制图像。

我在ListView中的图像将为128x128像素,因此我将一个空白ImageList控件(图像尺寸为128x128)分配为ListView的图像列表,以自动定义项目大小。

enter image description here

到目前为止,这对我仍然有效。但是我需要消除项目行之间的空间(如示例图像所示)。我的目标是使自定义列表视图看起来像图像网格。我不必担心项目左右两边的空间,只需要消除行之间的空间即可使它看起来像一个连续的网格。

感谢您的帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

切换到“平铺视图”并执行自己的绘图可以避免行距问题:

listView1.TileSize = new Size(128, 128);
listView1.View = View.Tile;
listView1.OwnerDraw = true;
listView1.DrawItem += listView1_DrawItem;

和一个简单的绘制例程:

private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e) {
  Color textColor = SystemColors.WindowText;
  if (e.Item.Selected) {
    if (listView1.Focused) {
      textColor = SystemColors.HighlightText;
      e.Graphics.FillRectangle(SystemBrushes.Highlight, e.Bounds);
    } else if (!listView1.HideSelection) {
      textColor = SystemColors.ControlText;
      e.Graphics.FillRectangle(SystemBrushes.Control, e.Bounds);
    }
  } else {
    using (SolidBrush br = new SolidBrush(listView1.BackColor)) {
      e.Graphics.FillRectangle(br, e.Bounds);
    }
  }

  e.Graphics.DrawRectangle(Pens.Red, e.Bounds);
  TextRenderer.DrawText(e.Graphics, e.Item.Text, listView1.Font, e.Bounds,
                        textColor, Color.Empty,
                        TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter);
}

结果:

enter image description here