这是我遇到很多麻烦的事情。经过几天的试验,我终于弄清楚了如何正确缩放 WinForms。这也可能对其他人有帮助。
有很多修改app.manifest 或app.config 文件的建议。该解决方案可能适用于早期版本的 Windows,但对我没有用。安装我的应用程序后,图片和控件搞砸了(在 Visual Studio 中调试一切正常)。经过一些测试后,我发现将“覆盖高 dpi 缩放”选项设置更改为“应用程序”对我有用。但我想在应用程序中支持这一点,而不是修改某些 Windows 设置。
我偶然发现了一份 Windows 支持文档,解释说他们已经使用最新版本的 Windows 更改了一些 DPI 缩放比例,旧方法可能不起作用。
您实际上需要做的就是按照以下步骤操作:
</startup>
和<userSettings>
之间,插入以下片段<System.Windows.Forms.ApplicationConfigurationSection>
<add key="DpiAwareness" value="PerMonitorV2" />
</System.Windows.Forms.ApplicationConfigurationSection>
Application.EnableVisualStyles()
就是这样!在机器上安装后,您的应用程序在 4K 环境中应该看起来很棒。 如需进一步参考,请参阅这篇来自微软的文章。
要添加到 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 元素,不需要特定代码。