C#のWPFでアプリのデフォルトのフォントを変える

WPFでは各コントロールにFontFamilyプロパティがありそこでフォントが変更できる。

特に指定しなければ親コントロールの設定が引き継がれ、一番親のWindowでも指定しなければシステムフォントが使われる。

 

沢山のWindowが出てくるシステムでは、1つ1つFontFamilyプロパティを設定するのは面倒なので、一度に変更してしまいたい。

 

そんな時は以下のようにWindowの依存関係プロパティをオーバーライドしてしまうとよい。

Windowクラスの依存関係プロパティをオーバーライド

    public partial class App : Application
    {
        public App()
        {
            var font = new System.Windows.Media.FontFamily("メイリオ");

            var style = new Style(typeof(Window));
            style.Setters.Add(new Setter(Window.FontFamilyProperty, font));

            FrameworkElement.StyleProperty.OverrideMetadata(typeof(Window), new FrameworkPropertyMetadata(style));
        }
    }

FontFamilyオブジェクトの作成 (5行目)

システムで利用したいフォント名を指定してFontFamilyを作成する。

上の例では「メイリオ」フォントを指定。

 

 

Styleオブジェクトを作成 (7行目~8行目)

WindowクラスをTargetTypeとしたStyleを作成。

作成したFontFamilyオブジェクトをFontFamilyPropertyへセットする。

 

 

WindowクラスのStyleプロパティをオーバーライド (10行目)

作成したStyleオブジェクトでFrameworkPropertyMetadataオブジェクトを作成。

FrameworkElement.StyleProperty.OverrideMetadataメソッドでWindowクラスのStyleプロパティをオーバーライドする。

 

 

 これで、作成されるWindowオブジェクトは「メイリオ」のFontFamiltyで作成されるようになり、特に明示しない限りその中に配置されるコントロールのフォントも「メイリオ」になる。