Eine etwas andere Herangehensweise an die bisher vorgestellt.
Sie könnten das Ereignis ScrollViewer
ScrollChanged
verwenden und achten Sie darauf, dass der Inhalt der ScrollViewer
größer wird.
private void ListBox_OnLoaded(object sender, RoutedEventArgs e)
{
var listBox = (ListBox) sender;
var scrollViewer = FindScrollViewer(listBox);
if (scrollViewer != null)
{
scrollViewer.ScrollChanged += (o, args) =>
{
if (args.ExtentHeightChange > 0)
scrollViewer.ScrollToBottom();
};
}
}
Dies vermeidet einige Probleme mit der Bindung an den ListBox
ItemsSource
Wechsel. Die ScrollViewer
kann auch ohne die Annahme gefunden werden, dass ListBox
die Standardsteuervorlage verwendet.
// Search for ScrollViewer, breadth-first
private static ScrollViewer FindScrollViewer(DependencyObject root)
{
var queue = new Queue<DependencyObject>(new[] {root});
do
{
var item = queue.Dequeue();
if (item is ScrollViewer)
return (ScrollViewer) item;
for (var i = 0; i < VisualTreeHelper.GetChildrenCount(item); i++)
queue.Enqueue(VisualTreeHelper.GetChild(item, i));
} while (queue.Count > 0);
return null;
}
Dann befestigen diese an die ListBox
Loaded
Veranstaltung:
<ListBox Loaded="ListBox_OnLoaded" />
Dies könnte leicht zu sein, eine angefügte Eigenschaft modifiziert werden, so dass es für allgemeine Zwecke zu machen.
zwei der drei Links hier sind verstorben (und sie sind die einzigen beiden mit einem Potenzial, etwas Nützliches zu der Frage hinzuzufügen) –