WPF GUI を Windows フォント サイズ オプション (DPI) で拡大縮小したくありません。スケーリングは UserControl のイメージと境界線に影響するため、UserControl で固定フォント サイズを指定するだけの問題ではありません。スケーリングをオフにするために UserControl に設定できるプロパティはありますか? そうでない場合、どうすればそれを行うことができますか?
3 に答える
現在の 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 倍率を取得するコードは、このブログ投稿からのものです。
Windows には、高 dpi 設定で失敗するバグのあるアプリケーション用の互換性ヘルパーが含まれています。
[Windows XP スタイルの DPI スケーリングを使用する] は必ずオフのまま (またはオフ) にしてください。
dpiAware
また、アプリケーションのアセンブリ マニフェストに " " エントリがないことを確認してください。
Windows はアプリケーションに嘘をつき、96dpi であると伝え、グラフィック カードがウィンドウ全体を拡大します。
すべてが少しあいまいで、一般的に使いにくいですが、バグのある WinForm コントロールを修正するまでは十分に機能します。
注:マニフェストエントリにより、アプリケーションは、dpi スケーリングをオプトアウトする
dpiAware
ことを Windows に通知できます。アプリケーションは、高 dpi でテストされている場合にのみ、このアイテムを追加します。
DpiDecoratorに加えて、アイテムのフォントサイズも修正する必要があります。たとえば、Windows XPでは、設定が大きいフォントに設定されている場合、メニュー項目のフォントサイズは14に設定され、DPI設定を使用して拡大されるため、MenuItemのフォントサイズやその他のUI項目を修正しない場合フォントの場合、このアイテムタイプのウィンドウのデフォルト値を取得します。また、ユーザーは他のアイテムのフォントサイズ/フォント面を手動で変更できることを忘れないでください...