Windows Forms DPI缩放技术

19

在此输入图像描述

我的应用程序在100% DPI设置下看起来很好,但当用户选择不同的(125%或150%)时,单词不能适配容器。我尝试使用我在这里找到的解决方案进行修复:检测Windows字体大小(100%、125%、150%),它是:

this.AutoScaleMode = AutoScaleMode.Dpi;

它修复了150%的设置(这使得它有点模糊,但没关系),不幸的是,它没有对PC上使用的125%进行同样的修复,而该应用程序的运行目标就是在该PC上。

是否有一些简单的解决方法,还是我必须手动重新排列每个表格?


1
请参考以下链接:https://dev59.com/6W855IYBdhLWcg3w6Y5q,该链接涉及创建一个 DPI 感知应用程序的相关内容。 - stuartd
1
在150%的缩放比例下,Windows会接管缩放并允许窗口将自己绘制到位图中。然后将该位图呈现到屏幕上,并重新调整大小以使其更大。是的,看起来有点模糊,您必须声明dpiAware才能停止这种情况。但是,您肯定不具备DPI感知功能,因为您已经阻止了控件正确地重新调整大小。就像它们通常做的那样,截图永远不是展示编码问题的好方法。可能与窗体的Font属性有关,请勿分配它。 - Hans Passant
@HansPassant,我把窗体的字体大小改成了12号,这会引起问题吗? - Bartosz Karpiński
1个回答

13

创建DPI感知的应用程序

所有容器必须使用相同的AutoScaleMode - 这部分修复了我的问题

要求窗口应用程序在不同分辨率下具有相同的布局,意味着更改分辨率不应对应用程序的布局产生影响。以下是实现此目标的步骤。

  1. 使用表格布局面板
  2. 将控件拖到表格布局面板的单元格中,并设置锚定和停靠属性。
  3. 将拖动的控件的rowspan和colspan属性设置为合并单元格
  4. 根据单元格设置拖动控件的边距和填充。
  5. 拖动所有控件,并按照相同的步骤使用表格布局面板完成设计
  6. 现在将表格布局面板的所有列和行大小设置为autosize(或百分比)
  7. 设置tablelayoutpanel属性autosize = true,autosizemode = grow and shrink
  8. 设置表格布局面板的自动调整大小为true,autosizemode = grow and shrink
  9. 运行窗口应用程序。如果您的窗口应用程序以最大状态打开,则将tablelayoutpanel的dock属性设置为fill。

2
如果您使用表格布局面板并设置边距和填充,则可能会遇到问题 - 最好确保不要嵌套这些表格布局面板。 - Roman Starkov
如何在Windows窗体中忽略文本缩放,因为这个解决方案需要太多的工作(数百个窗体)? - Hrvoje Batrnek
被迫使用表格布局面板?如果我们想要SplitContainers呢? - Dan W
2023年后不再适用 :( - Daniel

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