В моем приложении мне нужно выбрать только что созданный документ (заметку), когда я go вернусь в библиотеку. После выбора элемента библиотеки необходимо прокрутить библиотеку до выбранного элемента.
Метод OnLoaded моей библиотеки:
private async void OnLoaded(object sender, RoutedEventArgs e)
{
await this.ViewModel.InitializeAsync();
// CollectionViewSource of my GridView being filled
ViewModel.CollectionChanging = true;
GroupInfoCVS.Source = ViewModel.GroupsCollection;
ViewModel.CollectionChanging = false;
// Loading Last selected item - THIS CHANGES SELECTION
ViewModel.LoadLastSelection();
}
После вызова метода LoadLastSelection выбор успешно изменен (I ' тестировал). Это метод, который вызывается после этого (в расширенном элементе управления GridView):
private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
this.SelectedItemsCount = this.SelectedItems.Count;
var newlySelectedItems = e.AddedItems;
if (newlySelectedItems.Any())
{
var item = newlySelectedItems.Last();
ScrollTo(item);
}
}
private void ScrollTo(object item)
{
UpdateLayout();
var itemUI = (FrameworkElement)this.ContainerFromItem(item);
if (itemUI != null)
{
_scrollViewer.UpdateLayout();
_scrollViewer.ChangeView(null, itemUI.ActualOffset.Y - itemUI.ActualHeight, null, false);
}
}
Это также работает по большей части. Если itemUI не равен нулю, метод успешно переходит к требуемому элементу. Проблемы начинаются, когда элементы начинают выходить за пределы экрана. Когда элементы полностью скрыты с экрана, они виртуализируются. Это означает, что ContainerFromItem возвращает значение null, поэтому я не могу использовать свойства смещения. Имейте в виду, что это на самом деле происходит до того, как метод OnLoaded библиотеки будет завершен.
Пожалуйста, помогите мне с какой-нибудь альтернативой, чтобы получить такие свойства или другие методы прокрутки, которые помогут мне успешно прокручивать.
Я много читал и пробовал использовать методы Dispatcher.RunAsyn c и ScrollIntoView, но мне не удалось добиться какого-либо поведения при прокрутке. Если вы укажете мне, как их успешно использовать, это тоже будет хорошим подспорьем.
Вот что я читал (и пробовал):
ItemContainerGenerator.ContainerFromItem () возвращает null?
Как узнать, когда элемент FrameworkElement был полностью отрисован?
Есть ли в WPF * 1030 событие «Все дочерние элементы загружены» *
Разрешить ListView прокрутить до выбранного элемента
Заранее спасибо!