当前位置: 首页 > news >正文

通过 AppSwitch 禁用 WPF 内置的触摸让 WPF 程序可以处理 Windows 触摸消息

WPF 框架自己实现了一套触摸机制,但同一窗口只能支持一套触摸机制,于是这会禁用系统的触摸消息(WM_TOUCH)。这能够很大程度提升 WPF 程序的触摸响应速度,但是很多时候又会产生一些 Bug。

如果你有需要,可以考虑禁用 WPF 的内置的实时触摸(RealTimeStylus)。本文介绍禁用方法,使用 AppSwitch,而不是网上广为流传的反射方法。


本文内容

    • 如何设置 AppSwitch
    • 反射禁用的方法
    • 此方法可以解决的问题一览
      • 拖拽窗口或者调整窗口大小时不能实时跟随的问题
      • 在部分设备上启动即崩溃
      • 在透明窗口上触摸会挡住 UWP 程序

如何设置 AppSwitch

在你的应用程序的 app.config 文件中加入 Switch.System.Windows.Input.Stylus.DisableStylusAndTouchSupport=true 开关,即可关闭 WPF 内置的实时触摸,而改用 Windows 触摸消息(WM_TOUCH)。

<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.Windows.Input.Stylus.DisableStylusAndTouchSupport=true" />
  </runtime>
</configuration>

如果你的解决方案中没有找到 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

在透明窗口上触摸会挡住 UWP 程序

  • 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

我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

相关文章:

  • 如何为非常不确定的行为(如并发)设计安全的 API,使用这些 API 时如何确保安全
  • 通过 mklink 收集本地文件系统的所有 NuGet 包输出目录来快速调试公共组件代码
  • 设计一个 .NET 可用的弱引用集合(可用来做缓存池使用)
  • 使用 C# 中的 dynamic 关键字调用类型方法时可能遇到的各种问题
  • 程序员可能会使用的各种命名规则
  • System.InvalidOperationException:“BuildWindowCore 无法返回寄宿的子窗口句柄。”
  • System.InvalidOperationException:“寄宿的 HWND 必须是指定父级的子窗口。”
  • 在使用 .NET Remoting 技术开发跨进程通信时可能遇到的各种异常
  • 使用 SetParent 跨进程设置父子窗口时的一些问题(小心卡死)
  • System.ComponentModel.Win32Exception (0x80004005): 无效的窗口句柄。
  • 解决 WPF 嵌套的子窗口在改变窗口大小的时候闪烁的问题
  • WPF 的 Application.Current.Dispatcher 中,为什么 Current 可能为 null
  • WPF 的 Application.Current.Dispatcher 中,Dispatcher 属性一定不会为 null
  • 提高使用 Visual Studio 开发效率的键盘快捷键
  • WPF 不要给 Window 类设置变换矩阵(分析篇):System.InvalidOperationException: 转换不可逆。
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • CentOS 7 修改主机名
  • CentOS6 编译安装 redis-3.2.3
  • isset在php5.6-和php7.0+的一些差异
  • javascript 总结(常用工具类的封装)
  • Material Design
  • Mybatis初体验
  • php面试题 汇集2
  • 多线程 start 和 run 方法到底有什么区别?
  • 翻译:Hystrix - How To Use
  • 回流、重绘及其优化
  • 老板让我十分钟上手nx-admin
  • 嵌入式文件系统
  • 全栈开发——Linux
  • 微服务入门【系列视频课程】
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • ionic异常记录
  • # Maven错误Error executing Maven
  • #pragma pack(1)
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (HAL库版)freeRTOS移植STMF103
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (ZT)薛涌:谈贫说富
  • (二)windows配置JDK环境
  • (转)母版页和相对路径
  • **PHP分步表单提交思路(分页表单提交)
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .bat批处理(一):@echo off
  • .describe() python_Python-Win32com-Excel
  • .net 4.0发布后不能正常显示图片问题
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET 发展历程
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • @RunWith注解作用
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429
  • [16/N]论得趣
  • [8-27]正则表达式、扩展表达式以及相关实战