13

我有一个承载许多图像的 WinForm 应用程序。当我将应用程序放在 DPI 为 120 的 Win7 机器上时,它完全破坏了表单的外观。有没有办法禁用我的表单的缩放?

我知道这是不建议的,DPI 应该是无缝的并由操作系统处理。但是当涉及到皮肤应用程序时,图像不能很好地缩放。我没有为所有 DPI 变体创建图像的奢侈,所以请不要建议作为答案。

4

4 回答 4

10

更改 AutoScaleMode 属性时会遇到更大的问题。增加 DPI 也会改变系统字体大小。必须如此,字体大小以点表示,1/72 英寸。当 DPI 增加时,字体需要更大才能获得相同的点大小,并在从相同距离查看时保持文本同样可读。

由于控件不再调整大小,因此按钮上的文本不再适合。解决此问题的一种方法是按比例更改控件上的字体大小。如果您让所有控件继承表单字体很容易,只需更改表单的 Font 属性也会自动更新控件。明显的缺点是用户将很难阅读文本。当 DPI 达到每英寸 150 点及以上时,这尤其糟糕,您的 UI 只会变成无法使用的邮票。

是的,背景图像需要缩放以适应更大的控件或表单。图像中的像素现在不再一对一地映射到显示器的像素。默认的 Graphics.InterpolationMode 值在过滤图像方面做得相当不错。但这取决于图像的种类,结果如何。照片几乎总是可以很好地缩放。精细的线条艺术和文字没有。选择正确类型的图像对于避免创建单独的图像大有帮助。

在显示器开始具有打印机所具有的那种分辨率之前,这个问题不会消失。我们距离桌面显示器的 600 dpi 还有很长的路要走。电话将是第一。

于 2010-10-24T18:48:12.017 回答
9

在 Form1 构造函数中对 InitializeComponent 的自动生成调用之前添加一行代码为我解决了这个问题:

public partial class Form1 : Form
{
    public Form1()
    {
        // Make the GUI ignore the DPI setting
        Font = new Font(Font.Name, 8.25f * 96f / CreateGraphics().DpiX, Font.Style, Font.Unit, Font.GdiCharSet, Font.GdiVerticalFont);
        InitializeComponent();
    }
}
于 2014-07-02T11:24:48.007 回答
8

创建一个应用程序清单文件(右键单击项目/添加/新项目/应用程序文件)并取消注释此部分:

<application xmlns="urn:schemas-microsoft-com:asm.v3">
  <windowsSettings>
    <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware
  </windowsSettings>
</application>

本网站的信誉:https ://www.telerik.com/blogs/winforms-scaling-at-large-dpi-settings-is-it-even-possible-

于 2019-11-25T20:05:05.150 回答
3

您可以将AutoScaleMode表单的属性设置为None

于 2010-10-24T17:05:52.987 回答