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

从.NET Framework迁移到.NET Core,如何设置EnableWindowsFormsHighDpiAutoResizing为false?

在.NET Core/.NET 5+ WinForms中设置EnableWindowsFormsHighDpiAutoResizing

你遇到的这个问题很常见——.NET Core重构了WinForms的配置系统,原来.NET Framework里依赖app.config的高DPI设置方式确实不再直接生效了。别担心,有两种可靠的方式来实现你要的效果:

方法1:通过项目文件(.csproj)配置(推荐)

这是最简洁且持久的方式,修改项目文件后编译会自动生效,不需要额外的代码或配置文件:

打开你的WinForms项目的.csproj文件,在<PropertyGroup>节点内添加以下两个配置项:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net6.0-windows</TargetFramework> <!-- 你的目标框架,比如netcoreapp3.1也可以 -->
    <UseWindowsForms>true</UseWindowsForms>
    
    <!-- 设置DPI感知模式为PerMonitorV2 -->
    <DpiAwareness>PerMonitorV2</DpiAwareness>
    <!-- 禁用WinForms自动高DPI缩放,对应原来的EnableWindowsFormsHighDpiAutoResizing=false -->
    <EnableWindowsFormsHighDpiAutoResizing>false</EnableWindowsFormsHighDpiAutoResizing>
  </PropertyGroup>
</Project>

保存文件后重新编译你的项目,这个配置会被嵌入到应用程序的元数据中,运行时WinForms会自动读取并应用,完全替代了原来app.config里的配置项。

方法2:通过代码层面配置

如果你需要动态控制这些设置(比如根据运行环境调整),可以在应用启动时通过代码配置:

.NET 6+ 顶级语句格式的Program.cs

using System.Windows.Forms;

var builder = Application.CreateBuilder(args);

// 配置DPI感知模式和自动缩放开关
builder.Properties["DpiAwareness"] = HighDpiMode.PerMonitorV2;
builder.Properties["EnableWindowsFormsHighDpiAutoResizing"] = false;

builder.UseWindowsForms();
var app = builder.Build();

// 启动主窗体
app.Run(new MainForm());

传统Main方法格式(.NET Core 3.1/.NET 5)

using System;
using System.Windows.Forms;

namespace YourWinFormsApp
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            // 先设置DPI模式
            Application.SetHighDpiMode(HighDpiMode.PerMonitorV2);
            
            // 通过应用配置禁用自动缩放
            var config = new System.Configuration.Configuration();
            config.AppSettings.Settings.Add("EnableWindowsFormsHighDpiAutoResizing", "false");
            
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainForm());
        }
    }
}

为什么原来的app.config不生效?

在.NET Core/.NET 5+中,WinForms团队重构了配置加载逻辑,不再读取app.config里的<System.Windows.Forms.ApplicationConfigurationSection>节点,而是改用MSBuild项目属性(方法1)或新的应用构建器系统(方法2)来管理这些全局设置,这样更符合.NET Core的配置统一规范。

用上面的任意一种方法,都能实现和你原来.NET Framework环境中完全一致的高DPI行为——启用PerMonitorV2感知,同时禁用自动缩放,让你可以自行处理窗口的缩放逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 12:38:00