我需要滚动NavigationView
到其SelectedItem
。在下面的方法中,我尝试使用一种方法TryMoveFocusAsync
,另一种方法是通过从ScrollViewer
事件中通过SelectedItem
的父级获取SelectionChanged
。但是,父母似乎是空的。
注意:NavigationView没有像ScrollIntoView
这样的ListView
第一种方法
private async void OnSelectionChanged(
NavigationView sender, NavigationViewSelectionChangedEventArgs args)
{
if (args.SelectedItem is NavigationViewItem item)
{
FocusManager.TryFocusAsync(
sender.SelectedItem as DependencyObject,
FocusState.Pointer);
ViewModel.NavigateTo(item.Name);
}
UpdateBackButton();
}
第二种方法
private async void OnSelectionChanged(
NavigationView sender, NavigationViewSelectionChangedEventArgs args)
(args.SelectedItem as NavigationViewItem).Parent
返回null。
是否可以将NavigationViewMenuItem
滚动到其选定的索引?
答案 0 :(得分:1)
由于google_auth_oauthlib
之外没有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