将滚动事件从 ListView 冒泡到其父级 [英] Bubbling scroll events from a ListView to its parent
问题描述
在我的 WPF 应用程序中,我有一个 ListView
,它的 ScrollViewer.VerticalScrollBarVisibility
设置为 Disabled
.它包含在 ScrollViewer
中.当我尝试在 ListView
上使用鼠标滚轮时,外部 ScrollViewer
不会滚动,因为 ListView
正在捕获滚动事件.>
如何强制 ListView
允许滚动事件冒泡到 ScrollViewer
?
需要在内部listview中捕捉预览鼠标滚轮事件
MyListView.PreviewMouseWheel += HandlePreviewMouseWheel;
或者在 XAML 中
然后停止滚动列表视图的事件并在父列表视图中引发事件.
private void HandlePreviewMouseWheel(object sender, MouseWheelEventArgs e) {如果(!e.处理){e.handled = true;var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta);eventArg.RoutedEvent = UIElement.MouseWheelEvent;eventArg.Source = 发件人;var parent = ((Control)sender).Parent 作为 UIElement;parent.RaiseEvent(eventArg);}}
信誉转给@robert-wagner,他在几个月前为我解决了这个问题.
In my WPF application I have a ListView
whose ScrollViewer.VerticalScrollBarVisibility
is set to Disabled
. It is contained within a ScrollViewer
. When I attempt to use the mouse wheel over the ListView
, the outer ScrollViewer
does not scroll because the ListView
is capturing the scroll events.
How can I force the ListView
to allow the scroll events to bubble up to the ScrollViewer
?
You need to capture the preview mouse wheel event in the inner listview
MyListView.PreviewMouseWheel += HandlePreviewMouseWheel;
Or in the XAML
<ListView ... PreviewMouseWheel="HandlePreviewMouseWheel">
then stop the event from scrolling the listview and raise the event in the parent 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);
}
}
Creds go to @robert-wagner who solved this for me a few months ago.
这篇关于将滚动事件从 ListView 冒泡到其父级的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!