2008-09-11 7 views

Antwort

3

Eine Problemumgehung besteht darin, eine ImageList zu verwenden, die so groß ist, wie Sie die Elemente verwenden möchten. Füllen Sie einfach ein leeres Bild mit der Hintergrundfarbe. Sie können das Bild sogar so weit verbreitern, dass horizontal nicht viel Platz beansprucht wird.

8

Ich weiß, dass dieser Beitrag ziemlich alt ist, aber wenn Sie nie die beste Option gefunden haben, habe ich eine blog post, die helfen kann, es beinhaltet LVM_SETICONSPACING.

Nach meinem Blog,

Zunächst werden Sie hinzufügen müssen:

using System.Runtime.InteropServices; 

Als nächstes werden Sie die DLL importieren müssen, so dass Sie Sendmessage verwenden kann, zu Ändern Sie die ListView-Parameter.

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

Sobald dies abgeschlossen ist, erstellen Sie die folgenden zwei Funktionen:

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

dann die Funktion zu nutzen, müssen nur Ihre Listview übergeben, und die Werte eingestellt. In dem Beispiel ist 64 Pixel die Bildbreite und 32 Pixel ist mein horizontaler Abstand/Abstand, 100 Pixel ist die Bildhöhe und 16 Pixel ist mein vertikaler Abstand/Abstand, und beide Parameter erfordern ein Minimum von 4 Pixeln.

+1

Bitte senden Sie relevante Inhalte aus dem Blogpost in Ihrer Antwort. –

+1

'LVM_SETICONSPACING' gilt nur für ListViews in der Symbolansicht. Gibt es eine Möglichkeit, in der Detailansicht etwas Ähnliches zu tun, um den Zeilenabstand zu ändern (nicht die Zeilenhöhe, die wie @Joel Lucsy sagt, kann mit einer Bildliste gemacht werden)? –