首页 > 解决方案 > 暂时禁用 ScrollViewer 的滚动

问题描述

我有ScrollViewer一个ItemPresenter里面。包含一些下拉菜单,当我打开其中ItemsPresenter一个下拉菜单时,我想禁用 parentScrollViewer的滚动,并且只有在 dropbox 关闭时才重新启用它。
通过说“禁用”,我的意思是完全阻止滚动(即使使用鼠标滚轮)。

我试图将其设置VerticalScrollBarVisibilityDisabled

<ScrollViewer HorizontalScrollBarVisibility="Disabled"
              VerticalScrollBarVisibility="Disabled">
   <ItemsPresenter />
</ScrollViewer>

但这也不起作用。
它只是隐藏了滚动条,但鼠标滚轮仍然有效

那么,有没有办法完全禁用ScrollViewer's 的滚动?

这是我拥有的完整代码:

<ListView.Template>
   <ControlTemplate>
      <ScrollViewer HorizontalScrollBarVisibility="Disabled"
                    VerticalScrollBarVisibility="{Binding IsScrollEnabled, Converter={StaticResource BoolToVisibilityConverter}}">
         <ItemsPresenter />
      </ScrollViewer>
   </ControlTemplate>
</ListView.Template>

PS有很多类似的问题thisthis,但没有一个是我想要的。

标签: c#.netwpfxamlmvvm

解决方案


您可以通过PreviewMouseWheel处理ScrollViewer.

<ScrollViewer HorizontalScrollBarVisibility="Disabled"
              VerticalScrollBarVisibility="{Binding IsScrollEnabled, Converter={StaticResource BoolToVisibilityConverter}}"
              PreviewMouseWheel="UIElement_OnPreviewMouseWheel">
   <ItemsPresenter />
</ScrollViewer>
private void UIElement_OnPreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
   e.Handled = true;
}

推荐阅读