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

.NET Core WinForms高DPI缩放异常:设计时正常、运行时失效

解决.NET Core Windows应用高DPI缩放运行时失效问题

核心修复方案

1. 修正应用清单文件配置

你之前添加的配置仅在设计时生效,大概率是因为未正确配置应用清单文件(app.manifest),导致运行时未加载高DPI感知规则。操作步骤:

  • 若项目无app.manifest,右键项目→添加→新建项→选择「应用程序清单文件」创建
  • 打开清单文件,找到<application>节点,替换为以下配置:
<application xmlns="urn:schemas-microsoft-com:asm.v3">
  <windowsSettings>
    <!-- 启用系统DPI感知,支持动态缩放 -->
    <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/PM</dpiAware>
    <!-- 适配Windows 10+的高DPI模式 -->
    <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2, PerMonitor</dpiAwareness>
  </windowsSettings>
</application>
  • 保存后重新生成项目,运行时即可识别显示器的250%缩放比例。

2. 代码层面强制启用高DPI支持

若清单配置仍不生效,可在应用启动时通过代码强制设置:

  • WinForms应用:在Program.cs入口方法中添加(需引用System.Windows.Forms):
using System.Windows.Forms;

// 放在Application.Run之前
Application.SetHighDpiMode(HighDpiMode.PerMonitorV2);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
  • WPF应用:在App.xaml.cs的OnStartup方法中添加:
using System.Windows;

protected override void OnStartup(StartupEventArgs e)
{
    System.Windows.Forms.Application.SetHighDpiMode(System.Windows.Forms.HighDpiMode.PerMonitorV2);
    base.OnStartup(e);
}

3. 检查发布配置完整性

确保发布时清单文件被正确打包:

  • 右键项目→属性→发布→查看「文件发布选项」,确认app.manifest被包含
  • 若用ClickOnce发布,在「应用程序文件」中设置app.manifest的发布状态为「包含」

对客户端发布版本的影响

  • 修复后的配置无负面影响,反而能提升不同DPI屏幕下的显示体验
  • 配置向后兼容:低DPI(100%缩放)屏幕上应用正常显示,高DPI屏幕自动适配
  • 针对Windows 7/8等旧系统,PerMonitorV2会自动降级为兼容模式,不会出现兼容性问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 07:57:03