Прокрутка ListBox к последнему элементу
Моя цель в том, чтобы отображать в ListBox последние добавленные элементы. Строго говоря, я симулирую через ListBox консоль вывода.
В Avalonia ListBox не имеет метода ScrollToEnd, но имеет метод ScrollIntoView, который, к сожалению, не дает эффекта. Я нашел на GitHub issue на этот счет, где говорилось о решении через запуск метода в UI потоке, что тоже не возымело эффекта.
Мои поиски привели меня к тому, что ScrollViewer имеет желаемый метод ScrollToEnd, но получить его при загрузке формы не получилось. Возможно потому, что он создается неявным образом именно когда контент не вмещается в viewport. С этим я смогу разобрать, но у меня родился вопрос: собственно, все ли я делаю правильно или есть более простой путь?
Ответы (1 шт):
Ответ на основе комментария Андрей NOP
Проблема была в том, что я:
- не использовал выделение элемента перед вызовом
ScrollIntoView - не заметил перегрузки
ScrollIntoView, принимающейobject
Рабочий код моем случае код выглядит так:
// обработчик события во MainWindowViewModel.cs
private void OnLogMessage(LogMessage logMessage)
{
LogMessages.Add(logMessage);
Dispatcher.UIThread.Post(x => { MainWindow.ScrollListBox(logMessage);}, null);
}
// код в MainWindow.cs
public void ScrollListBox(object item)
{
ListboxLog.SelectedItem = item;
ListboxLog.ScrollIntoView(item);
}