You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过代码/配置实现WinForms程序的High DPI缩放替代设置?

WinForms高DPI适配问题(ClickOnce部署场景)

我们有一款WinForms程序,在Windows显示设置为100%比例时显示正常,但切换到125%等缩放比例时会出现显示异常。通过代码层面修复(比如设置AutoScaleMode等)工作量极大,还存在老旧第三方控件的适配难题,因此寻求替代解决方案。

兼容性设置的有效方案(无法直接使用)

在程序属性的兼容性设置中,有“High DPI scaling override”选项,包含以下选择:

  • Application(不缩放,保持100%时的尺寸)
  • System
  • System (enhanced)

选择**System (enhanced)**时,程序可正常缩放,所有标签和控件显示均正确。但由于程序采用ClickOnce部署,无法直接使用该兼容性设置,因此希望通过代码、app.config配置或清单设置实现相同效果。

已尝试的方案

  • 了解过DpiAwareness配置,但它的效果不如“High DPI scaling override”,且没有对应“High DPI override=Application”的设置项。
  • 曾在清单文件中添加以下配置,该配置几乎生效,但包含嵌入式浏览器的窗体显示异常(而使用“High DPI scaling override”时该窗体显示正常):
<asmv3:windowsSettings>
  <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</dpiAware>
  <gdiScaling xmlns="http://schemas.microsoft.com/SMI/2017/WindowsSettings">true</gdiScaling>
</asmv3:windowsSettings>
  • 考虑过修改注册表AppCompatFlags\Layers项(设置“High DPI scaling override”实际会修改该注册表项),但希望采用非注册表的实现方式。

补充说明与有效配置

此前对“System enhanced”的测试结果有误,现在运行时其表现与上述清单配置一致,但最初测试时显示正常,原因未知。不过我们找到了一段可正常生效的清单配置:

<asmv3:windowsSettings>
  <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</dpiAware>
  <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">unaware</dpiAwareness>
</asmv3:windowsSettings>

内容的提问来源于stack exchange,提问作者Magnus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 07:59:52