WPF 绑定command在触屏上操作时,即使点中button也可能不触发

发布时间 2023-06-13 18:25:29作者: 盛沧海

现象:

WPF程序绑定的command在触摸屏上,点击button后,button绑定的事件偶尔会出现不响应的情况。确认100%点击有效,不会出现误触的情况。

但是用鼠标点击,绝对不会出现这种现象。

 

原因:

在非触屏环境,bingding command是由点击来触发,即是使用鼠标等输入设备来执行点击触发command,调用的是系统外设API来进行处理。

但在触屏环境下,绑定的command则是由手指或触摸笔等触摸屏幕后,再由内部的实时触控API或多点触控API进行处理……而这两个API在同一个HWND(HWND 的全称是 Handle to Window,表示窗口句柄。)上互斥。

 

详细资料见MSDN:Disable the RealTimeStylus - WPF .NET Framework | Microsoft Learn

 

尝试方法:

禁用RealTimeStylus后,在测试中又会出现另外的问题——即在触屏上用滚动就不行了,这就引入了新的问题。若项目中不需要滚动,此还是能解决存在问题的;但若需要滚动,并应用于触控环境,这就是个问题了。

当然有治标的方法是将所有的button绑定command全部转为touch事件来触发;只是如此在非触控环境,如此就不能正常使用了。

 

寻找更好方法中……