2

我对不同 DPI 中的表单属性 SizeGripStyle 有疑问。我的表单将属性 AutoScaleMode 设置为 Font 并使用 API 启用缩放(因为 ClickOnce 应用程序)。手柄不知何故低于表格。在互联网上我没有找到任何提及。如果可能的话,知道如何解决它吗?

那里有不同 DPI 下握把行为的照片

该程序在 C# 4.0 和 WF 中。

4

1 回答 1

1

这是 Windows 本身的一个错误。Winforms要求视觉样式渲染器绘制夹点。它严重破坏了工作,而不是让它变得更大,而是让它变得更小。它实际上不应该做任何事情,你指定它应该用夹子填充的矩形。真是个错误,不幸的是,对于视觉样式渲染器来说并不少见。

您对此无能为力,希望他们有一天会修复该错误。但有一件事,你必须自己抓紧。将表单的 SizeGripStyle 属性设置回 Auto 并覆盖 OnPaint() 以绘制它:

protected override void OnPaint(PaintEventArgs e) {
    base.OnPaint(e);
    var gripSize = (int)(16 * e.Graphics.DpiX / 96f);
    var rc = new Rectangle(this.ClientSize.Width - gripSize, 
                           this.ClientSize.Height - gripSize, gripSize, gripSize);
    ControlPaint.DrawSizeGrip(e.Graphics, this.BackColor, rc);
}

不像您从视觉样式渲染中获得的“酒窝”样式那么漂亮,您也可以考虑绘制位图,但您需要多个版本来匹配 DPI。

于 2016-10-21T09:08:24.640 回答