处理自动扩展的正确方法

12

我正在和另一位开发人员一起开发WinForms应用程序,我们遇到了与自动缩放相关的大问题。

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

Display scaling

据我所知,125%会将DPI设置为120,并将默认字体大小(菜单等)设置为11pt。而另一位开发人员的系统默认为100%,即96 dpi和9pt字体。 我不确定,但我认为只有DPI才是导致我们困扰的原因。

问题表现为文本大小错误,要么覆盖其他控件,要么间距过大(取决于谁最后使用设计师模式)。就我所知,所有ContainerControl都设置为AutoScaleMode.Inherit,而顶级窗体为AutoScaleMode.Dpi。这是大多数其他人使用的吗?


真正的解决方案是使用WPF及其强大的布局机制。但是,现在是否将整个项目转换为WPF是另一回事... - Branko Dimitrijevic
很遗憾,客户明确要求不使用WPF完成此任务。 - Jonathon Reinhart
有趣...他们给出了具体的理由吗? - Branko Dimitrijevic
我认为这是因为他们没有熟悉WPF的人在交付后提供支持。 - Jonathon Reinhart
@Tymek 那么那些未设置为100%的用户呢? - Jonathon Reinhart
@JonathonReinhart 哦,我误解了你的描述,我以为问题在于设计文件保存在125%的机器上。 - tymtam
3个回答

5
我曾经遇到过一个应用程序的同样问题。解决方案是将其转移到WPF平台。当我仍在使用WinForms时,我采用的解决方案是开发两个可执行文件。其中一个在96DPI下开发,另一个在120DPI下开发。这是一种双倍的努力,但我尝试了各种布局配置都没有成功。如果我的控件在96DPI下看起来很好,那么切换到120DPI后,它们会超出窗口应用程序的范围,反之亦然。WPF是解决这个烦人问题的唯一方法。

0
最终,我们的解决方案是通过设置AutoScaleMode = AutoScaleMode.None禁用自动缩放。这需要一些仔细的布局(并留下比预期更大的间隙),但至少自动缩放不会干扰事情。
这似乎是一个大问题,因为甚至VisualStudio的部分也因我的高屏幕设置而出现了伪影。

0

这可能是您表单中组件的锚定出了问题。例如,如果组件没有锚定到四个角落并且DPI更改了,则格式可能会受到影响。

当我更改电脑上的DPI并打开设计师时,我没有看到任何格式问题......也许提供更多信息会有所帮助。哪些组件彼此覆盖?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接