C# 触摸滚动在WPF中不起作用
我有一个WPF应用程序,在其中的一部分我有一张显示Javascript的卡片。我的问题是,我无法用鼠标在Javascript卡上滚动,因为它正在吞噬事件。我通过挂接C# 触摸滚动在WPF中不起作用,c#,.net,wpf,C#,.net,Wpf,我有一个WPF应用程序,在其中的一部分我有一张显示Javascript的卡片。我的问题是,我无法用鼠标在Javascript卡上滚动,因为它正在吞噬事件。我通过挂接UIElement发送的PreviewMouseWheel事件(此处描述)解决了这个问题: protected void AddListeners(BorderedCanvas borderedCanvas) { borderedCanvas.PreviewMouseWheel += PreviewMouseWheel; }
UIElement
发送的PreviewMouseWheel
事件(此处描述)解决了这个问题:
protected void AddListeners(BorderedCanvas borderedCanvas)
{
borderedCanvas.PreviewMouseWheel += PreviewMouseWheel;
}
protected void RemoveListeners(BorderedCanvas borderedCanvas)
{
borderedCanvas.PreviewMouseWheel -= PreviewMouseWheel;
}
protected static void PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
if (!e.Handled)
{
e.Handled = true;
var eventArg =
new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta)
{
RoutedEvent = UIElement.MouseWheelEvent,
Source = sender
};
var parent = VisualTreeHelper.GetParent((UIElement)sender) as UIElement;
parent?.RaiseEvent(eventArg);
}
}
现在,用鼠标滚动效果非常好
但是,使用触摸滚动不起作用
因此,我修改了AddListeners
:
protected void AddListeners(BorderedCanvas borderedCanvas)
{
borderedCanvas.PreviewMouseWheel += PreviewMouseWheel;
borderedCanvas.PreviewTouchDown += new EventHandler<TouchEventArgs>(OnTouchDown);
borderedCanvas.PreviewTouchMove += new EventHandler<TouchEventArgs>(OnTouchMove);
}
但是,触摸滚动仍然不起作用
知道我做错了什么吗
对我来说,我似乎以类似的方式对待鼠标滚动和触摸滚动,但第一个工作,第二个不工作。您需要设置ScrollViewer.PanningMode使其与触摸一起工作
<ScrollViewer PanningMode="Both"/>
PanningMode的默认值为None。为什么要捕获这些事件并再次手动引发父控件的事件。如果您不处理父UI控件(
e.handled=true
),事件将自动冒泡到父UI控件。我尝试只设置e.handled=true
,但在这种情况下滚动不起作用。因此,我将事件冒泡发送给父级,正如本文所述,这是有效的。我没有一些与此组件关联的.xml
文件,因此我不确定在哪里设置PanningMode
属性。您说您有一个WPF应用程序,您的看法是什么?不是,xaml?甚至连主机都没有?我正在使用这个库将React本机代码转换为WPF:。视图就在里面。我正在编写的这个组件只是库的一个包装器,应该可以确保滚动工作。据我的经验所知,它支持触摸滚动,我曾经遇到过这个问题,它确实解决了这个问题。我认为它们之间没有任何区别。您也可以将OnTouchDown作为回调直接传递,只要它的参数类型为TouchEventArgs。
<ScrollViewer PanningMode="Both"/>