5 Stimmen

Listenfeld Bildlaufleiste Daumen ändert Größe, wenn der Inhalt variable Höhe hat

Ich habe ein ListBox mit vielen dargestellten Objekten, von denen jedes eine variable Höhe haben kann, basierend auf der Anzahl der Werte, die jedes Objekt hat. Sehen Sie meine vorherige Frage, die hier beantwortet wurde.

Viele Objekte sind 5 Zeilen hoch, während andere nur 1 Zeile hoch sind. Die Scrollleiste im ListBox scheint dies nicht zu mögen, wahrscheinlich aufgrund der Virtualisierung. Während Sie scrollen, ändert der Schieberegler an der Scrollleiste seine Größe, abhängig davon, wie viele Elemente tatsächlich in das Feld passen, zu diesem aktuellen Zeitpunkt. Dies macht den Schieberegler manchmal sehr groß und manchmal sehr klein.

Da sich dieses ListBox auch innerhalb eines TabControls befindet, wird das ListBox beim Wechsel von einem Tab zum anderen oft zu einem anderen Abschnitt scrollen, wenn Sie zu ihm zurückkehren.

Irgendwelche Ideen, wie man ein solches Problem lösen kann?

Zusätzliche Informationen: Das Deaktivieren der Virtualisierung behebt das Scrollproblem, allerdings auf Kosten einer langsameren anfänglichen Anzeige. Das Ändern der Größe des ListBox-Inhalts führt jedoch zu einer starken Verzögerung beim horizontalen Ändern der Größe (vertikal ist in Ordnung), was ich auf die Änderung der Breite meines Templates zurückführe und eine Neuberechnung jedes Elements erfordere:

Dies zeichnet Rahmen um die Ränder der Felder, um eine visuelle Gruppierung zu erstellen, wobei val sich an die Inhaltsgröße anpassen wird. Das Listbox hat auch HorizontalContentAlignmment = Stretch, um sicherzustellen, dass dies korrekt aussieht.

\-------------------
- var - opt - val -
-     -------------
-     - opt - val -
-     -------------
-     - opt - val -
-------------------

Hinweis: Wenn dies in einer separaten Frage erörtert werden muss, lassen Sie es mich wissen und ich werde die Fragen trennen

7voto

Dmitry Tashkinov Punkte 1896

Warum schalten Sie nicht alle Größenbeschränkungen für die ListBox selbst aus, lassen Sie sie sich an den Inhalt anpassen und umhüllen Sie sie in einen ScrollViewer, wobei Sie eine angemessene Größe für letzteren festlegen?

Das Markup sollte wie folgt aussehen:

Ich habe während des Scrollens keine Änderungen der Daumengröße gesehen, wenn es auf diese Weise implementiert wurde.

5voto

Eric Punkte 791

Set ScrollViewer.CanContentScroll="False" auf die ListBox, dies deaktiviert, was als "logisches Scrollen" bezeichnet wird, das Scrollen basierend auf der Anzahl der Elemente anstelle der Höhe ("physisches Scrollen").

0voto

Ana Betts Punkte 72423

Deaktivieren Sie die Virtualisierung oder stellen Sie sicher, dass alle Elemente in Ihrem ListBox die gleiche Höhe haben. Wenn Sie weniger als 100 Elemente haben, können Sie auf die Virtualisierung verzichten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X