繁体   English   中英

为什么.NET会在大DPI设置下不正确地缩放?

[英]Why do .NET winforms scale improperly at large DPI settings?

我的.NET应用程序(如果你真的必须知道VB.NET 3.5)表单在高DPI设置下渲染时格式不正确。 到目前为止,我发现的所有修复都只是解释了问题的原因,因为“某些UI元素无法正确扩展”。 我想知道是否有人有更有意义的解释? 谢谢!

基本上问题是GDI +(以及扩展名,Windows Forms)使用设备像素作为其默认测量单位。 更改DPI设置时,像素的物理大小实际上不会更改(像素是像素),但是以非像素大小测量的字体和图像会相应缩放。 Windows Forms试图通过为布局腾出更多空间来尽可能地适应这种情况,但唯一真正的解决方案是始终使用基于非像素的测量系统。 这就是WPF所做的。

在WPF中,在96DPI,与设备无关的像素对应于与物理像素相同的大小。 但是当您更改系统的DPI时,WPF会全局缩放虚拟坐标系。 应用程序,控件等都不知道它们不再与物理像素对齐。 事实上,这有时会导致WPF中的别名问题,但您几乎不必担心应用程序的布局在不同的DPI设置中会有所不同。

您可以做的一件事是最小化Windows窗体中的问题是使用“新”(从.NET 2.0开始)布局面板,如TableLayoutPanel,FlowLayoutPanel等。尽可能使用Anchor,Dock和AutoSize。 这将允许Windows窗体尽可能地重排您的UI。

还要注意,如果您使用非标准DPI创建表单,Windows窗体将使用此作为“基本”大小。 它几乎总是搞砸了。 因此,尝试使用96 DPI来设计表单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM