设计时在 WinForms UserControl 中显示的弹出窗口的字体大小问题

Font Size issue with a popup shown at design-time in a WinForms UserControl

我有一个 WinForms 自定义控件,它具有显示弹出窗口的设计时功能。

如果我在 Windows 设置(控制 Panel\All 控制面板 Items\Display)中更改系统字体缩放比例,那么弹出窗口中的标签将被剪切。

this video 中,您可以看到标准字体大小和字体大小更改为 125% 时的不同行为。

这是设计时从智能标签打开时关于表单的屏幕截图:

这是在 运行 时间打开时关于表单的屏幕截图:

我该如何解决这个问题?

(Source)

我找到了一个解决方法,即在显示之前将比例因子设置为表单。

public void About()
{
    float width, height;
    using (Graphics graphics = Graphics.FromHwnd(IntPtr.Zero))
    {
        width = graphics.DpiX / 96;
        height = graphics.DpiY / 96;
    }            
    About form = new About();            

    if (width != 1 || height != 1)
        form.Scale(new SizeF(width, height));

    form.ShowDialog();
}

似乎工作正常。

Visual Studio (VS) 设计器中的问题是 Visual Studio 被声明为 DPI 感知,这意味着它将自行处理不同的 DPI 设置。但是,关于表单似乎不支持不同的 DPI,因为您已将其 AutoScaleModel 属性 设置为字体。

当在 WindowsFormsApplication1 中使用 About 表单时,它可以工作 "fine" 因为该应用程序默认声明为非 DPI 感知。在这种情况下,操作系统会将表单呈现为沙盒中的位图,并在将其显示在屏幕上之前将其放大,因此您可以看到文本是模糊的。

为了避免 VS 设计器中的问题,您必须确保您的关于表单可以处理不同的 DPI 设置。实际上,您的解决方法是支持不同 DPI 设置的解决方案之一。

更新: This post 详细描述了 WinForms 应用程序中的 DPI 感知。