WinForm 的 Windows 高 DPI 缩放

问题描述 投票:0回答:2

这是我遇到很多麻烦的事情。经过几天的试验,我终于弄清楚了如何正确缩放 WinForms。这也可能对其他人有帮助。

有很多修改app.manifest 或app.config 文件的建议。该解决方案可能适用于早期版本的 Windows,但对我没有用。安装我的应用程序后,图片和控件搞砸了(在 Visual Studio 中调试一切正常)。经过一些测试后,我发现将“覆盖高 dpi 缩放”选项设置更改为“应用程序”对我有用。但我想在应用程序中支持这一点,而不是修改某些 Windows 设置。

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

c# .net winforms scaling dpi
2个回答
4
投票

您实际上需要做的就是按照以下步骤操作:

  1. 找到你的 app.config
  2. </startup>
    <userSettings>
    之间,插入以下片段
<System.Windows.Forms.ApplicationConfigurationSection>
  <add key="DpiAwareness" value="PerMonitorV2" />
</System.Windows.Forms.ApplicationConfigurationSection>
  1. 保存文件并重新加载您的项目
  2. 确保您已从清单中删除任何其他调整
  3. 在您的主要方法或入口点设置它

Application.EnableVisualStyles()

就是这样!在机器上安装后,您的应用程序在 4K 环境中应该看起来很棒。 如需进一步参考,请参阅这篇来自微软的文章。


0
投票

要添加到 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
的 dpiAwareness 元素(不要与
app.config
的元素混淆。 .).相反,.NET Core5+ 直接支持 app.manifest 的 dpiAwareness 元素,不需要特定代码。

© www.soinside.com 2019 - 2024. All rights reserved.