2009-07-17 5 views
2

Ich habe eine ListBox in einer PopupControl. Problem ist, dass Popup während des Scrollens die Größe so ändert, dass sie dem tatsächlich breitesten Element entspricht.WPF ListBox feste Breite

Wie kann ich diese Größenänderung vermeiden und automatisch an das breiteste Element in der gesamten Liste anpassen?

Ich habe versucht, es in eine Grid aber ohne Erfolg zu setzen.

+0

Können Sie anhand des Inhalts berechnen, wie groß ein bestimmtes ListBoxItem sein soll? – exclsr

Antwort

1

Wenn Sie die Virtualisierung aktivieren möchten, können Sie Popup.Width auf eine Konstante setzen.

Natürlich, um die richtige Konstante auszuwählen, müssen Sie berechnen (oder zumindest erraten), wie breit jeder ListBoxItem wird, und wählen Sie die max. ... Normalerweise ist es nicht schwer, anhand Ihrer Inhalte eine grobe Schätzung zu erhalten.

6

ok das ist die Lösung: Um diese Eigenschaft Hinzufügen

<ListBox VirtualizingStackPanel.IsVirtualizing="False" 

Die Redimensionierung stoppt, weil nun das Gremium alle Elemente enthält und die Breite eingestellt die breiteste respektieren. Mit dem Virtualisierungsbereich wird nur ein Teil der Elemente angezeigt, und die ListBox passt die Breite an das tatsächlich sichtbare breiteste Element an.

Disadvantade ist, dass wir nicht verwenden Virtualisieren-Panel mehr

+0

Aber diese Lösung ist für viele Gegenstände zu langsam! –

0

meist WPF UIElement Kontrollen haben eine Width Eigenschaft (die standardmäßig aktiviert), die eingestellt werden kann, um „Auto“, so dass sie einnehmen wird, so viel Raum als ihr breitestes Element.

+0

Ich denke nicht, dass das in diesem Fall funktioniert, da nichts bestimmt hat, was das breiteste Element ist, wenn Virtualisierung aktiviert ist. – exclsr

+0

Genau. Mit der Virtualisierung wird es nicht funktionieren –