Frage

Im Grunde, was ich tun möchte, ist ein Benutzer einen String-Wert eingeben und das Listenfeld blättern zu dem Elemente, das den Text übereinstimmt sie (oder das erste LIKE Spiel) eingegeben haben.

Wenn ich die .ScrollIntoView () -Methode verwenden, das Problem ist, dass es das Element an Teh Boden des sichtbaren Bereichs setzt, wenn der Artikel weiter unten in der Liste als die aktuelle Bildlaufposition, und es ist an der Spitze, wenn es ist in der Liste höher als die aktuelle Bildlaufposition. Ich will es, indem es das oberste Element in der Liste konsistent machen (es sei denn natürlich kann es nicht fällig einer der letzten „Seite“ zu sein, der Artikel).

Ich habe zu fälschen versucht, durch das Element auswählen, das ist x weiter unten in der Liste, wobei x die Anzahl der Elemente sichtbar ist. Dies funktioniert, wenn gehen nach unten, aber bricht, wenn gehen wieder nach oben. und ich war nicht in der Lage zu bestimmen, welcher Index ist derzeit die eine oben sichtbare Stelle in meiner Liste.

WinForms Listenfelder haben die Eigenschaft, die .TopIndex die genau das, was ich suche, aber ich habe es nicht gelungen, die WPF-äquivalent zu finden. Jemand da draußen eine Idee, wie dies zu erreichen?

Vielen Dank im Voraus!

War es hilfreich?

Lösung

Verwenden ScrollIntoView zweimal, zuerst das sehr letzte Element in der Liste anzuzeigen, dann ausgewähltes Element zu zeigen. Auf diese Weise wird es immer von unten nach oben arbeiten. Sie müssen UpdateLayout nach jedem Anruf rufen, um sicherzustellen, dass die Positionen korrekt sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top