如何隐藏NavigationView的垂直滚动条?修改样式无效求原因
我明白你遇到的困扰了——直接给NavigationViewList或者全局ListView设置VerticalScrollBarVisibility="Hidden"完全没效果,这背后的原因是在LeftCompact模式下,控制侧边栏滚动的并不是NavigationViewList本身,而是它外层的一个专属ScrollViewer容器。
为什么之前的方法无效?
当你把PaneDisplayMode设为LeftCompact时,NavigationView的侧边栏内容(包括你看到的MenuItemsHost)会被包裹在一个名为PaneScrollViewer的滚动容器里。这个外层ScrollViewer才是负责Pane区域滚动、显示滚动条的核心控件,而此时NavigationViewList本身并没有启用滚动功能,所以你给它设置滚动条属性自然不会产生任何变化。
正确的解决步骤
你需要修改NavigationView的模板,找到这个外层的PaneScrollViewer并调整它的滚动条属性:
- 确认你已经把NavigationView的完整样式复制到了
App.xaml中(你之前已经完成了这一步)。 - 在样式的
<ControlTemplate TargetType="NavigationView">代码块里,定位到名为PaneScrollViewer的ScrollViewer元素(通常在Pane布局相关的区域,靠近PaneContentGrid的位置)。 - 给这个
PaneScrollViewer添加或修改以下属性:<ScrollViewer x:Name="PaneScrollViewer" VerticalScrollBarVisibility="Hidden" VerticalScrollMode="Auto"> <!-- 原有模板内容 --> </ScrollViewer>- 如果你只是想隐藏滚动条但保留滚动功能,用
VerticalScrollBarVisibility="Hidden"; - 如果完全不需要Pane区域滚动,就把
VerticalScrollMode设为Disabled。
- 如果你只是想隐藏滚动条但保留滚动功能,用
额外的简化方案
如果你不想修改整个NavigationView模板,也可以通过代码在运行时定位到这个PaneScrollViewer并设置属性:
// 在NavigationView的Loaded事件中调用 var paneScrollViewer = yourNavigationView.Template.FindName("PaneScrollViewer", yourNavigationView) as ScrollViewer; if (paneScrollViewer != null) { paneScrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Hidden; }
内容的提问来源于stack exchange,提问作者Vincent
相关产品推荐
相关产品推荐

