Поскольку удобный метод ScrollIntoView
недоступен за пределами ListView
, сделать это немного больше. Сначала нам нужно написать вспомогательный метод, который находит родителя DependencyObject
, используя VisualTreeHelper
:
private T FindParentOfType<T>(DependencyObject item)
{
while (item != null)
{
item = VisualTreeHelper.GetParent(item);
if (item is T expectedParent)
{
return expectedParent;
}
}
return default;
}
Теперь, используя это, мы сначала находим ScrollViewer
(который должен бытьродительский элемент NavigationViewItem
):
var scrollViewer = FindParentOfType<ScrollViewer>(item);
Теперь нам нужно выяснить положение этого пункта меню в средстве просмотра прокрутки, что можно сделать с помощью TransformToVisual
и TransformPoint
. Зная это вертикальное местоположение, мы можем теперь прокрутить его, используя ScrollViewer.ChangeView
метод:
if (scrollViewer != null)
{
var transform =
item.TransformToVisual(scrollViewer)
.TransformPoint(new Point(0,0));
scrollViewer.ChangeView(null, transform.Y, null);
}