WPF 框架自己实现了一套触摸机制,但同一窗口只能支持一套触摸机制,于是这会禁用系统的触摸消息(WM_TOUCH
)。这能够很大程度提升 WPF 程序的触摸响应速度,但是很多时候又会产生一些 Bug。
如果你有需要,可以考虑禁用 WPF 的内置的实时触摸(RealTimeStylus)。本文介绍禁用方法,使用 AppSwitch,而不是网上广为流传的反射方法。
本文内容
- 如何设置 AppSwitch
- 反射禁用的方法
- 此方法可以解决的问题一览
- 拖拽窗口或者调整窗口大小时不能实时跟随的问题
- 在部分设备上启动即崩溃
- 在透明窗口上触摸会挡住 UWP 程序
如何设置 AppSwitch 在你的应用程序的 app.config 文件中加入
Switch.System.Windows.Input.Stylus.DisableStylusAndTouchSupport=true
开关,即可关闭 WPF 内置的实时触摸,而改用 Windows 触摸消息(WM_TOUCH
)。
如果你的解决方案中没有找到 app.config 文件,可以创建一个:
文章图片
文章图片
然后,把上面的代码拷贝进去即可。
反射禁用的方法 微软的官方文档也有提到使用放射禁用的方法,但一般不推荐这种调用内部 API 的方式,比较容易在 .NET 的版本更新中出现问题:
- Disable the RealTimeStylus for WPF Applications - Microsoft Docs
- WPF 禁用实时触摸 - 林德熙
- Why all my WPF applications fail to drag outside of their windows since Windows 10 (1809/1903) such as resizing the window or do drag drop? - Stack Overflow
- All WPF applications fail to drag outside of their windows since Windows 10 (1809/1903) such as resizing the window or do drag drop · Issue #1323 · dotnet/wpf
文章图片
在部分设备上启动即崩溃
- .NET 4.7 - WPF - Touch Enabled Devices Crash Applications · Issue #480 · microsoft/dotnet
- Visual Studio may freeze or crash when running on a pen-enabled machine - Developer Community
- c# - On Windows 10 (1803), all applications lost touch or stylus if a WPF transparent window covers on them - Stack Overflow
- Disable the RealTimeStylus for WPF Applications - Microsoft Docs
- WPF-Samples/runtimeconfig.template.json at master · microsoft/WPF-Samples
- All WPF applications fail to drag outside of their windows since Windows 10 (1809/1903) such as resizing the window or do drag drop · Issue #1323 · dotnet/wpf
【dotnet|通过 AppSwitch 禁用 WPF 内置的触摸让 WPF 程序可以处理 Windows 触摸消息】如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。
文章图片
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。
推荐阅读
- windows11|Windows11安装Android子系统
- C#|C# 文件路径操作
- 其他|有趣的10个CMD命令
- windows|Windows 11 手机诞生,还是双屏的()
- java|My GrokTalk-十分钟内十种工具
- Ubuntu|Ubuntu 3D桌面