c# - 触摸滚动在 WPF 中不起作用
问题描述
我有一个 WPF 应用程序,其中一部分我有一张显示 Javascript 的卡片。我的问题是我无法用鼠标在 Javascript 卡上滚动,因为它正在吞噬事件。我通过挂钩PreviewMouseWheel
发送的事件(在此处描述)解决了这个问题UIElement
:
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);
}
我添加了这些方法:
protected static void OnTouchDown(object sender, TouchEventArgs e)
{
if (!e.Handled)
{
e.Handled = true;
var eventArg =
new TouchEventArgs(e.TouchDevice, e.Timestamp)
{
RoutedEvent = UIElement.TouchDownEvent,
Source = sender
};
var parent = VisualTreeHelper.GetParent((UIElement)sender) as UIElement;
parent?.RaiseEvent(eventArg);
}
}
protected static void OnTouchMove(object sender, TouchEventArgs e)
{
if (!e.Handled)
{
e.Handled = true;
var eventArg =
new TouchEventArgs(e.TouchDevice, e.Timestamp)
{
RoutedEvent = UIElement.TouchMoveEvent,
Source = sender
};
var parent = VisualTreeHelper.GetParent((UIElement)sender) as UIElement;
parent?.RaiseEvent(eventArg);
}
}
但是,触摸滚动仍然不起作用。
知道我做错了什么吗?
对我来说,我似乎以类似的方式处理鼠标滚动和触摸滚动,但第一个有效,第二个无效。
解决方案
您需要设置 ScrollViewer.PanningMode 以使其与触摸一起使用。
<ScrollViewer PanningMode="Both"/>
PanningMode 的默认值为无。
推荐阅读
- javascript - 将Angular 6中组件的渲染模板移动到body元素的正下方?
- java - 递归方法删除所有出现
- python - 编写一个提示输入整数并打印 int 的程序,如果输入了其他任何内容,请再次询问,直到输入整数
- jquery - 到达最后一个轮播项目时如何循环卡片
- reactjs - 将 handleChange 函数作为 Prop 发送到 2 个或更多组件不起作用
- c# - 类列表将多个值分配给字符串列表
- vue.js - 在 Vue 中的函数之后同步执行 $emit()
- r - 将库(rgbif)函数 occ_data 中的列表拆分为数据框
- couchdb - 返回 CouchDB 查询中未知键的默认值
- excel - 复制行并减少 ID