WinUI/XAML导航页面时如何动态修改NavigationView Header属性
实现方法
点击NavigationView菜单项切换页面时同步更新Header,只需要在ItemInvoked事件处理逻辑中,获取当前点击菜单项的显示文本,直接赋值给NavigationView的Header属性即可。
前置修正
你现有代码存在一处会导致功能失效的问题:XAML中ItemInvoked绑定的事件方法名为NavigationView_ItemInvoked,后台代码定义的方法名是NavigationView_OnItemInvoked,名称不匹配会导致事件完全不触发,需要先统一两个位置的方法名。
修改后的后台事件代码
private void NavigationView_ItemInvoked(Microsoft.UI.Xaml.Controls.NavigationView sender, Microsoft.UI.Xaml.Controls.NavigationViewItemInvokedEventArgs args) { FrameNavigationOptions navOptions = new FrameNavigationOptions(); navOptions.TransitionInfoOverride = args.RecommendedNavigationTransitionInfo; // 同步更新Header为当前选中菜单项的文本 if (args.InvokedItemContainer is NavigationViewItem clickedItem) { sender.Header = clickedItem.Content?.ToString(); } #pragma warning disable IDE0007 // Use implicit type string navItemTag = args.InvokedItemContainer.Tag.ToString(); #pragma warning restore IDE0007 // Use implicit type Type pageType = null; if (navItemTag == "Page1") { pageType = typeof(Page1); } else if (navItemTag == "Page2") { pageType = typeof(Page2); } else if (navItemTag == "Page3") { pageType = typeof(Page3); } else if (navItemTag == "Page4") { pageType = typeof(Page4); } else if (navItemTag == "Page5") { pageType = typeof(Page5); } if (pageType == null) { return; } rootFrame.NavigateToType(pageType, null, navOptions); }
代码说明
- 增加
NavigationViewItem类型判断,是为了兼容后续添加设置项、菜单分割线等非导航类菜单项的场景,避免空引用报错 - 直接读取菜单项的
Content属性取值,和你在XAML中配置的菜单项文本完全一致,不需要额外硬编码文本映射关系,后续修改菜单项显示内容时,Header会自动同步更新,无需修改后台逻辑 - 你XAML中初始配置的
Header="Home"和默认第一个菜单项匹配,应用启动时初始显示状态正常,不需要额外在页面加载事件中赋值Header
内容的提问来源于stack exchange,提问作者vacyc
相关产品推荐
相关产品推荐

