先日の記事では、
using System.Windows.Markup; using System.Globalization; //省略… public MainPage() { InitializeComponent(); this.Language = XmlLanguage.GetLanguage(CultureInfo.CurrentUICulture.Name); }
を各Pageのコンストラクターにこういう感じで書くと、言語によってフォントを適切に出来るとご紹介しました。
今回はまた新しいやり方。今度はもっと楽にできます。
先ほどの記事のコメント欄にて、
Shintaroさん
私も日本語フォントの切り替えについて調べていたのですが、PhoneAppicationPage クラスではなく、PhoneApplicationFrame のLanguage プロパティを変更することで、アプリケーション全体でフォントを切り替えられることを確認しました。
というコメントを頂きました。ご紹介します。
App.xaml.csの該当する場所(Application_Launchingメソッド)に以下のように記述します。
using System.Windows.Markup; using System.Globalization; //省略… private void Application_Launching(object sender, LaunchingEventArgs e) { this.RootFrame.Language = XmlLanguage.GetLanguage(CultureInfo.CurrentUICulture.Name); }
こちらでも試したところ、確かにPageのLanguageを設定しなくともフォントが適切に切り替わりました。
PageおよびFrameの言語はどうなっているのか確認してみます。
適当にブレークポイントを置いた上で、イミディエイトウィンドウで確認してみます。
まずはFrameから。
?(Application.Current as App).RootFrame.Language
{System.Windows.Markup.XmlLanguage}
_languageTag: "ja-jp"
IetfLanguageTag: "ja-jp"
設定したとおり、きちんと「ja-jp」になっています。
ではPageを見てみると、
?this.Language
{System.Windows.Markup.XmlLanguage}
_languageTag: "en-us"
IetfLanguageTag: "en-us"
こちらは「en-us」と、今まで設定しなかった時と同じ設定です。
はて、これは一体?と思ってしまいますが、Frameの方の言語設定が優先されるということのようです。
(ページとフレームについては高橋さんの「プログラミング Windows Phone」の184ページをご参照ください ;-)
これでもっと簡単に言語設定ができるようになりました。
Shintaroさんありがとうございます。 id:shintarowakayama