如何仅使用C#代码开发UWP平台的NavigationMenu导航菜单
纯C#实现UWP标准侧边导航菜单
- 以下实现全程不依赖XAML代码编写,最终渲染效果和公开教程中XAML实现的导航菜单样式完全一致,包含可折叠侧边面板、汉堡触发按钮、内置菜单项、主内容区的完整布局逻辑。
核心实现步骤
1. 初始化导航核心控件
在自定义页面的构造函数中直接实例化UWP内置的NavigationView控件,配置核心布局参数匹配参考样式:
// 直接实例化导航控件,不需要从XAML加载 var rootNavView = new NavigationView(); // 配置布局属性 rootNavView.PaneDisplayMode = NavigationViewPaneDisplayMode.Auto; rootNavView.IsPaneToggleButtonVisible = true; // 显示左上角汉堡折叠按钮 rootNavView.OpenPaneLength = 200; // 展开状态侧边栏宽度 rootNavView.CompactPaneLength = 48; // 折叠状态侧边栏宽度 rootNavView.IsSettingsVisible = true; // 显示底部设置入口
2. 添加导航菜单项
在C#代码中逐一定义菜单条目,配置条目显示内容、图标、标识:
// 添加首页菜单项 var homeMenuItem = new NavigationViewItem() { Content = "首页", Icon = new SymbolIcon(Symbol.Home), Tag = "home" }; rootNavView.MenuItems.Add(homeMenuItem); // 添加功能页菜单项 var functionMenuItem = new NavigationViewItem() { Content = "核心功能", Icon = new SymbolIcon(Symbol.AllApps), Tag = "core" }; rootNavView.MenuItems.Add(functionMenuItem);
3. 搭建主内容区域并绑定导航逻辑
在导航控件的内容区放置页面跳转用的Frame容器,绑定菜单项切换的事件处理逻辑,实现点击菜单跳转对应页面:
// 初始化主内容容器 var mainContentFrame = new Frame(); rootNavView.Content = mainContentFrame; // 绑定菜单选中事件 rootNavView.SelectionChanged += (navSender, navArgs) => { if (navArgs.SelectedItem is NavigationViewItem selectedItem) { // 根据选中项的Tag标识跳转对应页面 switch (selectedItem.Tag.ToString()) { case "home": mainContentFrame.Navigate(typeof(HomePage)); break; case "core": mainContentFrame.Navigate(typeof(CoreFunctionPage)); break; } } };
4. 挂载到页面根节点
将构建完成的导航控件设置为当前页面的根展示内容,不需要做额外布局调整:
// 替换页面默认内容为导航控件 this.Content = rootNavView;
实现注意事项
- 整个流程不需要在对应Page的XAML文件中编写任何导航相关代码,所有控件实例化、属性配置、事件绑定逻辑全部通过C#完成。
- 导航控件自带的主题适配、窗口自适应折叠、菜单项选中高亮能力全部内置,不需要手动额外编写渲染逻辑,最终样式和XAML实现版本无差异。
- 所有菜单项支持动态调整顺序、增减条目,逻辑和XAML绑定的实现完全等价。
内容的提问来源于stack exchange,提问作者user15002155
相关产品推荐
相关产品推荐

