【问题标题】:Windows Forms DPI scalingWindows 窗体 DPI 缩放
【发布时间】:2014-11-22 07:05:46
【问题描述】:

我的应用程序在 100% DPI 设置下看起来不错,但是当用户选择不同的(125% 或 150%)字词时,容器不适合。我试图用我在这里找到的解决方案来解决这个问题:Detect windows font size (100%, 125%, 150%) 这是:

this.AutoScaleMode = AutoScaleMode.Dpi;

它修复了 150% 设置(让它有点模糊,但没关系),不幸的是,它并没有为 125% 设置相同的设置,该设置用于应用程序要运行的 PC。

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

【问题讨论】:

  • 在 150% 时,Windows 会接管缩放并让您的窗口将自身绘制成位图。然后它将该位图渲染到屏幕上,重新缩放以使其更大。是的,这看起来很模糊,你必须声明自己 dpiAware 才能阻止它。但是,您绝对不了解 DPI,您以某种方式阻止了控件正确地重新调整自身。就像他们通常做的那样,屏幕截图从来都不是显示编码问题的好方法。可能与表单的 Font 属性有关,请勿分配。
  • @HansPassant 我将表单中的字体大小更改为 12,这会导致问题吗?

标签: c# winforms dpi


【解决方案1】:

Creating a DPI-Aware Application

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

要求windows应用在不同的分辨率下应该有相同的布局,这意味着改变分辨率对应用的布局没有影响。以下是执行此操作的步骤。

  1. 使用表格布局面板
  2. 在表格布局面板的单元格中拖动控件并设置锚点和停靠属性。
  3. 设置拖动控件的 rowspan 和 colspan 属性以合并单元格
  4. 设置拖动控件相对于单元格的边距和内边距。
  5. 拖动所有控件并按照相同的步骤,使用 tablelayoutpanel 完成设计
  6. 现在设置 tablelayoutpanel 的所有列和行大小 = autosize(或以 % 为单位)
  7. 设置 tablelayoutpanel 属性 autosize = true,autosizemode = 增长和收缩
  8. 设置表单属性 autosize = true,autosizemode = 增长和收缩
  9. 运行 windows 应用如果您的 windows 应用以最大状态打开,则设置 tablelayoutpanel 停靠属性 =fill。

【讨论】:

  • 如果您使用表格布局面板并设置边距和内边距,您 might be in for a bad time - 最好确保您没有嵌套这些表格布局面板。
  • 如何忽略 windows 中 win 表单的文本放大,因为此解决方案需要太多工作(数百个表单)?
  • 强制使用表格布局面板?我们想要 SplitContainers 怎么样?
猜你喜欢
  • 2016-10-19
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
  • 2016-07-27
  • 2014-07-24
  • 2020-05-18
  • 2018-04-11
  • 2017-10-29
相关资源
最近更新 更多