在我的 WPF 应用程序中,我有一个 ListView
谁的ScrollViewer.VerticalScrollBarVisibility
设置为Disabled
。它包含在 ScrollViewer
中。当我尝试在 ListView
上使用鼠标滚轮时,外层 ScrollViewer
不滚动,因为 ListView
正在捕获滚动事件。
我怎样才能强制 ListView
允许滚动事件冒泡到 ScrollViewer
?
最佳答案
需要捕获内部 ListView 中的预览鼠标滚轮事件
MyListView.PreviewMouseWheel += HandlePreviewMouseWheel;
或者在 XAML 中
<ListView ... PreviewMouseWheel="HandlePreviewMouseWheel">
然后停止事件滚动 ListView 并在父 ListView 中引发事件。
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);
}
}
感谢@robert-wagner,他在几个月前为我解决了这个问题。
关于wpf - 从 ListView 到其父级的冒泡滚动事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1585462/