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 に答える