我的.NET应用程序(如果你真的必须知道VB.NET 3.5)表单在高DPI设置下渲染时格式不正确.到目前为止,我发现的所有修复都只是解释了问题的原因,因为"某些UI元素无法正确扩展".我想知道是否有人有更有意义的解释?谢谢!
Jos*_*osh 10
基本上问题是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来设计表单.