基于UWP NavigationView模式隐藏NavigationViewItemHeader
嘿,我之前在Windows 10 1709的NavigationView上也踩过这个坑!这个版本的组件确实没有原生支持Compact模式下自动隐藏NavigationViewItemHeader,不过咱们可以用两种方式解决:
方法一:监听DisplayModeChanged事件手动控制可见性
1709版本的NavigationView其实提供了DisplayModeChanged事件,用来监听显示模式的切换,我们可以在这个事件里手动切换Header的可见性。
步骤1:XAML中添加NavigationView和事件绑定
<NavigationView x:Name="MainNavView" DisplayModeChanged="MainNavView_DisplayModeChanged"> <NavigationView.MenuItems> <NavigationViewItemHeader Content="基础功能"/> <NavigationViewItem Content="首页" Icon="Home"/> <NavigationViewItem Content="设置" Icon="Settings"/> <NavigationViewItemHeader Content="扩展功能"/> <NavigationViewItem Content="工具" Icon="Tools"/> <NavigationViewItem Content="帮助" Icon="Help"/> </NavigationView.MenuItems> </NavigationView>
步骤2:后台代码处理模式切换
如果Header数量少可以逐个控制,要是数量多就遍历MenuItems批量处理:
private void MainNavView_DisplayModeChanged(NavigationView sender, NavigationViewDisplayModeChangedEventArgs args) { bool isCompactMode = sender.DisplayMode == NavigationViewDisplayMode.Compact; // 遍历所有菜单项,找到Header并切换可见性 foreach (var menuItem in sender.MenuItems) { if (menuItem is NavigationViewItemHeader header) { header.Visibility = isCompactMode ? Visibility.Collapsed : Visibility.Visible; } } }
方法二:升级Windows SDK到更高版本(推荐)
1709是NavigationView刚推出的版本,功能还比较基础。如果你项目的目标版本可以升级到Windows 10 1803(版本17134)及以上,后续版本的NavigationView已经原生支持Compact模式下自动隐藏Header,而且新增了PaneClosing、PaneOpened等更实用的Pane相关事件,能省掉很多手动处理的麻烦。
内容的提问来源于stack exchange,提问作者berkb
相关产品推荐
相关产品推荐

