WPF 程序无法触摸操作
2017-09-14 23:52
113 查看
WPF 自诞生以来就带着微软先生的傲慢。微软说 WPF 支持触摸,于是 WPF 就真的支持触摸了。对,我说的是“支持触摸”,那种摸上去能点能动的;偶尔还能带点儿多指的炫酷效果。但是,WPF 推出那会儿,绝大部分开发者都还没有触摸屏呢,开发个程序要怎么验证支不支持触摸呢?微软先生无奈地决定——你写鼠标的代码就好了,我帮你转换!于是……一大波 BUG 袭来……
触摸下无 Stylus/Touch 事件,也不提升为 Mouse 事件,但鼠标下有 Mouse 事件;导致整个界面完全无法触摸使用
触摸下 Stylus/Touch 有触发,但触发点位置在 (0, 0) 处或上一个触摸点处;导致即使触发了,当前控件也收不到
这就包括了用于清理触控资源的 StylusTouchDevice.OnDeactivate 方法。
而在
为
对当前触控设备的判断出现错误,持续返回
比如,
或者,在
WPF 的触摸失效有三种可能:
触摸下 Stylus/Touch 事件正常触发,但不提升为 Mouse 事件;导致仅使用 Mouse 事件的控件无法使用触摸下无 Stylus/Touch 事件,也不提升为 Mouse 事件,但鼠标下有 Mouse 事件;导致整个界面完全无法触摸使用
触摸下 Stylus/Touch 有触发,但触发点位置在 (0, 0) 处或上一个触摸点处;导致即使触发了,当前控件也收不到
第一种情况
使用触摸或者触笔操作时,如果Up事件中发生了任何异常,会导致
StylusLogic.PostProcessInput的后续逻辑不会正确执行,
这就包括了用于清理触控资源的 StylusTouchDevice.OnDeactivate 方法。
而在
StylusTouchDevice.OnDeactivate方法中,会重置
StylusLogic.CurrentMousePromotionStylusDevice属性
为
null或
NoMousePromotionStylusDevice。此方法不执行会直接导致
StylusLogic.ShouldPromoteToMouse方法
对当前触控设备的判断出现错误,持续返回
false,即不会再执行触控转鼠标的逻辑,出现触摸无效的现象。
第二种情况
WPF 程序在启动期间,如果触摸组件发生了异常,极有可能会使得触摸根本就没有初始化成功!比如,
System.Windows.Input.StylusLogic.RegisterStylusDeviceCore(StylusDevice stylusDevice)方法在启动时抛出
System.InvalidOperationException,虽然内部有
catch,但实际获取到的
TabletDevice个数是 0 个,根本无法获取触摸设备,于是触摸无效。
或者,在
WorkerOperationGetTabletsInfo.OnDoWork方法中,获取到了错误的触摸设备个数:
IPimcManager pimcManager = UnsafeNativeMethods.PimcManager; uint count; pimcManager.GetTabletCount(out count);
第三种情况
如果 WPF 的 StylusUp 事件被阻断(例如e.Handled = true,或者在 StylusUp 事件中弹出一个模态窗口),则下一次触摸时获取到的点坐标将是上一次被阻断时的点坐标。于是,阻断后的第一次点击必将点钟之前点的那个点,而不管现在点中了什么。如果阻断时点在新窗口外,则几乎相当于触摸失效。
相关文章推荐
- #747 –在WPF程序的触摸操作中使用惯性移动 (Implementing Inertia during Touch Manipulation)
- win7升级win10后出现VisualSVN Server提供程序无法执行所尝试的操作 0x80041024
- WPF程序长时间无人操作
- 【0003】删除文件时,提示操作无法完成,因为文件已在程序中打开?
- Win7 WPF程序无法接受外部拖拽
- Windows 8.1升级至Windows 10后,启动VisualSVN Server Manager报错:提供程序无法执行所尝试的操作 (0x80041024)的解决
- 无法从程序集中嵌入互操作类型
- 调用线程无法访问此对象,因为另一个线程拥有该对象 [c# wpf定时器程序报的错误]
- 初始化microsoft visual sourcesafe源代码管理提供程序时失败。您将无法使用此提供程序执行源代码管理操作
- win7删除文件时,提示“操作无法完成,因为其中的文件夹或文件已在另一程序中打开”问题
- 初始化 Microsoft Visual SourceSafe 源代码管理提供程序时失败。您无法使用此提供程序执行源代码管理操作
- 初始化 Microsoft Visual SourceSafe 源代码管理提供程序时失败。您无法使用此提供程序执行源代码管理操作
- ‘操作无法完成 ,因为其中的文件夹或文件已在另一程序中打开’问题解决
- IIS卸载与安装失败,提示“文件复制操作被取消.安装程序无法继续”的解决方法!
- Win7删除文件时,提示“操作无法完成,因为其中的文件夹或文件已在另一程序中打开”
- 该操作未能执行,因为 OLE DB 提供程序SQLOLEDB无法启动分布式事务
- 操作无法完成后台打印程序无法运行
- 微信小程序手势操作之单触摸点与多触摸点
- CodedUI Test 测试WPF程序,无法获取控件属性值的解决方法