.NET ListView row padding

前端 未结 2 1600
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-11 12:42

There doesn\'t seem to be a way to change the padding (or row height) for all rows in a .NET ListView. Does anybody have an elegant hack-around?

相关标签:
2条回答
  • 2020-12-11 13:18

    I know this post is fairly old, however, if you never found the best option, I've got a blog post that may help, it involves utilizing LVM_SETICONSPACING.

    According to my blog,

    Initially, you'll need to add:

    using System.Runtime.InteropServices;
    

    Next, you'll need to import the DLL, so that you can utilize SendMessage, to modify the ListView parameters.

    [DllImport("user32.dll")]
    public static extern int SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);
    

    Once that is complete, create the following two functions:

    public int MakeLong(short lowPart, short highPart)
    {
        return (int)(((ushort)lowPart) | (uint)(highPart << 16));
    }
    
    public void ListViewItem_SetSpacing(ListView listview, short leftPadding, short topPadding) 
    {     
        const int LVM_FIRST = 0x1000;     
        const int LVM_SETICONSPACING = LVM_FIRST + 53;     
        SendMessage(listview.Handle, LVM_SETICONSPACING, IntPtr.Zero, (IntPtr)MakeLong(leftPadding, topPadding));      
    } 
    

    Then to use the function, just pass in your ListView, and set the values. In the example, 64 pixels is the image width, and 32 pixels is my horizontal spacing/padding, 100 pixels is the image height, and 16 pixels is my vertical spacing/padding, and both parameters require a minimum of 4 pixels.

    ListViewItem_SetSpacing(this.listView1, 64 + 32, 100 + 16);
    
    0 讨论(0)
  • 2020-12-11 13:20

    A workaround is to use an ImageList that is as tall as you want the items to be. Just fill a blank image with the background color. You can even make the image 1 wide so as to not take much space horizontally.

    0 讨论(0)
提交回复
热议问题