处理自动缩放的正确方法

我正在与WinForms应用程序上的另一个开发人员合作,我们在与自动缩放相关的外观方面遇到了很大问题。

我的系统(索尼VAIO)在此菜单上默认为125%:

显示缩放

据我所知,125%将DPI设置为120,默认字体大小(菜单等)设置为11pt。 在另一个开发人员的系统上,他的默认值为100%,即96 dpi和9pt字体。 我不确定,但我认为只有DPI才是让我们感到悲痛的原因。

问题表现在文本大小错误,要么掩盖其他控件,要么过于分散(取决于最后在设计师中打开的人)。 据我所知,所有ContainerControl都设置为AutoScaleMode.Inherit ,顶级窗体是AutoScaleMode.Dpi 。 这是大多数人使用的吗?

我的一个应用程序遇到了同样的问题。 答案是将其转移到WPF。 我在使用WinForms时附带的解决方案是拥有2个可执行文件。 一个在96DPI下开发,另一个在120DPI下开发。 这是双重努力,但我尝试了任何布局配置没有成功。 如果我的控件在96DPI上看起来很好,当切换到120DPI时,它们就不在窗口的应用程序中了。 反之亦然。

WPF是解决这个烦人问题的唯一方法。

这可能是您在表单中锚定组件的问题。 例如,如果组件未锚定到所有四个角并且dpi发生更改,则格式可能会受到影响。

当我在计算机上更改dpi并打开设计器时,我没有看到任何格式化问题……也许更多信息可能有所帮助。 哪些组件相互覆盖?

最后,我们的解决方案是通过设置AutoScaleMode = AutoScaleMode.None禁用自动缩放。 它需要仔细放置一些东西(并留下比预期更大的间隙),但至少自动缩放不会出现并搞砸了。

这似乎是一个大问题,因为由于我的屏幕设置较高,甚至可以看到VisualStudio的某些部分也会出现伪像。