解决WPF中ListBox/DataGrid拦截滚轮事件的问题

本文最后更新于:2022年10月18日 下午

当使用类似

1
2
3
<ScrollViewer>
<ListBox/>
</ScrollViewer>

的结构时,会出现鼠标无法在内部滚动整个容器的情况,原因是内部组件拦截了滚轮事件。

经搜集资料,大佬的解决方案如下:

绑定PreviewMouseWheel事件

1
<ListBox PreviewMouseWheel="HandlePreviewMouseWheel">

后台代码拦截滚轮事件:

1
2
3
4
5
6
7
8
9
10
private void HandlePreviewMouseWheel(object sender, MouseWheelEventArgs e) {
if (!e.Handled) {
e.Handled = true;
var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta);
eventArg.RoutedEvent = UIElement.MouseWheelEvent;
eventArg.Source = sender;
var parent = ((Control)sender).Parent as UIElement;
parent.RaiseEvent(eventArg);
}
}

亲测有效,ListView/ListView/DataGrid 均可使用此方法。

来源:https://stackoverflow.com/questions/1585462/bubbling-scroll-events-from-a-listview-to-its-parent


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!