这似乎是一种默认行为,因为您的焦点NavigationViewItem
是手动设置的,在设置特定项目的焦点之前,它不会阻止 的默认焦点行为NavigationView
,如下所示:
- 打开
NavigationView
- 应用程序自动关注 MenuItems(自动选择第一项)
PaneOpened
您在事件中重置选项的焦点。
这个操作确实会引起焦点跳跃。为了避免这种情况,我们需要判断第一项何时获得焦点(strNaviTag
用作参考):
ShellPage.xaml
<winui:NavigationViewItem x:Uid="Shell_Main" Icon="People" Tag="main" helpers:NavHelper.NavigateTo="views:MainPage" GettingFocus="FirstItem_GettingFocus"/>
ShellPage.xaml.cs
private void OnItemInvoked(WinUI.NavigationView sender, WinUI.NavigationViewItemInvokedEventArgs args)
{
// ...
(Application.Current as App).strNaviTag = item.Tag.ToString();
// ...
}
private void NavigationViewItem_GettingFocus(UIElement sender, GettingFocusEventArgs args)
{
if((Application.Current as App).strNaviTag != "main"
&& !(args.OldFocusedElement is Microsoft.UI.Xaml.Controls.NavigationViewItem))
{
args.TryCancel();
return;
}
}
这可以防止在不满足要求时第一项获得焦点。
谢谢。