.net 用于WinForm的Windows高DPI缩放

lnlaulya  于 2023-03-09  发布在  .NET
关注(0)|答案(2)|浏览(391)

这是我遇到了很多麻烦的事情。经过几天的试验,我终于弄清楚了如何正确地缩放WinForms。这可能也会帮助其他一些人。
有很多关于修改app.manifest或app.config文件的建议。这个解决方案可能适用于早期版本的Windows,但对我来说没有一个有效。安装我的应用程序后,图片和控件变得一团糟(在VisualStudio中调试一切正常)。经过一些测试,我已经看到将“覆盖高dpi缩放”选项设置更改为“应用程序”对我很有效,但我希望在应用程序中支持这一点,而不修改一些Windows设置。

我偶然发现了一个Windows支持文档,解释说,他们已经改变了一些DPI缩放与最新版本的Windows和旧的方法可能不起作用。

hi3rlvi2

hi3rlvi21#

您实际需要做的就是按照以下步骤操作:
1.找到你的app.config
1.在</startup><userSettings>之间插入以下代码段

<System.Windows.Forms.ApplicationConfigurationSection>
  <add key="DpiAwareness" value="PerMonitorV2" />
</System.Windows.Forms.ApplicationConfigurationSection>

1.保存文件并重新加载项目
1.确保您已从清单中删除任何其他调整
1.在主方法或入口点中设置此参数
Application.EnableVisualStyles()
这就对了!你的应用安装到机器上后,在4K环境中应该看起来很棒。有关详细信息,请参阅this article from Microsoft.

ctzwtxfj

ctzwtxfj2#

为了补充max07的答案,另一个解决方案不是修改甚至提供app.config,而是只通过代码来完成,如下所示:

[STAThread]
static void Main()
{
    var section = ConfigurationManager.GetSection("System.Windows.Forms.ApplicationConfigurationSection") as NameValueCollection;
    if (section != null)
    {
        section["DpiAwareness"] = "PerMonitorV2";
    }

    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Main());
}

PS:这段代码只需要.NET Framework,因为.NET Framework(最高4.8)不荣誉app.manifest 's dpiAwareness元素(不要与app.config的元素混淆...)。相反,.NET Core5+直接支持app.manifest的dpiAwareness元素,而不需要特定的代码。

相关问题