You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 04:45:38