所以,这是场景:我试图使我所有的窗体(它们是Winforms)在4K和1080p也就是高DPI或“dpi-aware”下看起来好看。为了本问题的目的,我有三个窗体:frmCompanyMasterEdit 继承自frmBaseEdit,后者继承自frmBase,后者继承自System.Windows.Forms.Form。
我尝试了旧方法,通过在清单中使我的应用程序具有DPI感知性:
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>
</application>
除了我可以修复的少量锚定问题之外,该表单在4K下看起来完美,并且看起来与那个版本非常相似,但在1080p下会略微模糊一些。这是4K版本:旧版和新版都为4K。
无论如何,我放弃了那种方法,尝试使用.NET 4.7中描述的新方法,针对4.7框架并添加以下代码:
到 app.config
<System.Windows.Forms.ApplicationConfigurationSection>
<add key="DpiAwareness" value="PerMonitorV2" />
</System.Windows.Forms.ApplicationConfigurationSection>
到 app.manifest 文件
<!-- Windows 10 compatibility -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
同时,我还将旧代码从app.manifest中删除,以免覆盖新的.NET 4.7方式。我确保将代码放在适当的位置。
所以,在4K下表单看起来很好,就像上面的图片一样,但现在在1080p下它非常缩放,如图所示:
1080p新方式
因此,在4k下,表单看起来很棒,除了一些锚定问题外。无论是旧方式还是正确的大小,但在1080p下有点模糊或者在1080p下不会模糊,但是实际上被缩放了。
我还必须更改所有designer.vb文件中的这两行,如下所示:Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi
我不知道为什么在1080p下,我的内容看起来就是不合适。像我说的,我正在针对4.7 .NET 框架进行开发。我正在使用 Windows 10 的适当版本(版本号为1709/Creator's edition)。在1080p下,缩放比例为100%。此外,我们没有升级到 WPF 的资源。