WPF ListBox Scrollen, um automatisch zu beenden



Answers

listBox.ScrollIntoView(listBox.Items[listBox.Items.Count - 1]); Sie, dass listBox.ScrollIntoView(listBox.Items[listBox.Items.Count - 1]); funktioniert nur, wenn Sie keine doppelten Einträge haben. Wenn Sie Objekte mit demselben Inhalt haben, scrollt es zum ersten gefundenen Objekt.

Hier ist die Lösung, die ich gefunden habe:

ListBoxAutomationPeer svAutomation = (ListBoxAutomationPeer)ScrollViewerAutomationPeer.CreatePeerForElement(myListBox);

IScrollProvider scrollInterface = (IScrollProvider)svAutomation.GetPattern(PatternInterface.Scroll);
System.Windows.Automation.ScrollAmount scrollVertical = System.Windows.Automation.ScrollAmount.LargeIncrement;
System.Windows.Automation.ScrollAmount scrollHorizontal = System.Windows.Automation.ScrollAmount.NoAmount;
//If the vertical scroller is not available, the operation cannot be performed, which will raise an exception. 
if ( scrollInterface.VerticallyScrollable )
    scrollInterface.Scroll(scrollHorizontal, scrollVertical);
Question

In meiner Anwendung habe ich eine ListBox mit Elementen. Die Anwendung ist in WPF geschrieben.

Wie kann ich automatisch zum zuletzt hinzugefügten Element blättern? Ich möchte, dass der ScrollViewer an das Ende der Liste verschoben wird, wenn ein neues Element hinzugefügt wurde.

Gibt es ein Event wie ItemsChanged ? (Ich möchte das SelectionChanged Ereignis nicht verwenden)







Die beste Lösung besteht darin, das ItemCollection-Objekt im ListBox-Steuerelement zu verwenden. Diese Auflistung wurde speziell für Inhaltsbetrachter entwickelt. Es hat eine vordefinierte Methode, um das letzte Element auszuwählen und eine Cursorpositionsreferenz beizubehalten ....

myListBox.Items.MoveCurrentToLast();
myListBox.ScrollIntoView(myListBox.Items.CurrentItem);



Links