c# - 暂时禁用 ScrollViewer 的滚动
问题描述
我有ScrollViewer
一个ItemPresenter
里面。包含一些下拉菜单,当我打开其中ItemsPresenter
一个下拉菜单时,我想禁用 parentScrollViewer
的滚动,并且只有在 dropbox 关闭时才重新启用它。
通过说“禁用”,我的意思是完全阻止滚动(即使使用鼠标滚轮)。
我试图将其设置VerticalScrollBarVisibility
为Disabled
:
<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>
解决方案
您可以通过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;
}