WPFでは各コントロールがFontFamilyプロパティを持っており、このプロパティを指定する事でコントロール毎に思い通りのフォントへ変更する事が出来ます。
このプロパティは特に指定しなければ親コントロールの設定が引き継がれます。
一番親となるWindowクラスでも指定しなければシステムフォントが使われます。
いくつものWindowが登場するアプリケーションを作ろうとした場合、その1つ1つにFontFamilyプロパティを設定していくのは少し面倒です。設定は1回で済ませたい!
そんな時にはWindowクラスの依存関係プロパティをオーバーライドするという方法があります。
Windowクラスの依存関係プロパティをオーバーライド
プロジェクトを作成すると、Applicationクラスから派生した Appクラス(App.xml.cs)が作成されます。
作ろうとしているアプリケーションの基幹となるクラスです。
この AppクラスのコンストラクタでWindowオブジェクトが作られる時のスタイルを設定します。
App.xml.cs
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を持って作成されるようになります。そして特に明示しない限りその中に配置されるコントロールのフォントも「メイリオ」になるわけです。
コメントをお書きください