13

WPF GUI を Windows フォント サイズ オプション (DPI) で拡大縮小したくありません。スケーリングは UserControl のイメージと境界線に影響するため、UserControl で固定フォント サイズを指定するだけの問題ではありません。スケーリングをオフにするために UserControl に設定できるプロパティはありますか? そうでない場合、どうすればそれを行うことができますか?

4

3 に答える 3

12

現在の DPI 設定に基づいて UserControl を縮小できます。たとえば、UserControl を次の DpiDecorator でラップした場合、DPI 設定に関係なく同じように表示されます。

public class DpiDecorator : Decorator {

    public DpiDecorator() {
        this.Loaded += (s, e) => {
            Matrix m = PresentationSource.FromVisual(this).CompositionTarget.TransformToDevice;
            ScaleTransform dpiTransform = new ScaleTransform(1 / m.M11, 1 / m.M22);
            if (dpiTransform.CanFreeze)
                dpiTransform.Freeze();
            this.LayoutTransform = dpiTransform;
        };
    }

}

または、そのロジックを UserControl に移動することもできます。

DPI 倍率を取得するコードは、このブログ投稿からのものです。

于 2011-05-03T11:54:46.043 に答える
2

Windows には、高 dpi 設定で失敗するバグのあるアプリケーション用の互換性ヘルパーが含まれています。

[Windows XP スタイルの DPI スケーリングを使用する] は必ずオフのまま (またはオフ) にしてください。

ここに画像の説明を入力

dpiAwareまた、アプリケーションのアセンブリ マニフェストに " " エントリがないことを確認してください。

Windows はアプリケーションに嘘をつき、96dpi であると伝え、グラフィック カードがウィンドウ全体を拡大します。

すべてが少しあいまいで、一般的に使いにくいですが、バグのある WinForm コントロールを修正するまでは十分に機能します。

注:マニフェストエントリにより、アプリケーションは、dpi スケーリングをオプトアウトするdpiAwareことを Windows に通知できます。アプリケーションは、高 dpi でテストされている場合にのみ、このアイテムを追加します。

于 2011-06-23T23:02:01.740 に答える
1

DpiDecoratorに加えて、アイテムのフォントサイズも修正する必要があります。たとえば、Windows XPでは、設定が大きいフォントに設定されている場合、メニュー項目のフォントサイズは14に設定され、DPI設定を使用して拡大されるため、MenuItemのフォントサイズやその他のUI項目を修正しない場合フォントの場合、このアイテムタイプのウィンドウのデフォルト値を取得します。また、ユーザーは他のアイテムのフォントサイズ/フォント面を手動で変更できることを忘れないでください...

于 2011-06-06T15:46:35.130 に答える