埋め込みフォントをどう扱うべきか? 修正
#wpdev_jp
追記 環境によってはまだちゃんと動かないようです。もうちょっと調べます。
埋め込みフォントをどう扱うべきか? について、記載の方法では一部のコントロールのフォントが変わらないというご指摘をいただきました。
... 一部というより、ほとんどジャン。
まぁ、そもそもタイトルを見ればわかりますが、変わってませんよね。そしてそこにヒントがあります。何故、変わらないのか?
「それぞれがデフォルトの Styleを持っており、それを適応しているため」です。
なので、フォントを定義するところまではよかったのですが書くスタイルのフォト設定を再定義してやらないといけない。すべてのコントロールにやらないとね。
実装方法
で、App.xaml にこれを書けば多分OK。
フォントをリソース定義するときに PhoneFontFamilyNormal という名前でアプリケーションに定義します。後はその下の部分はコピペするだけ。主要なテキストを使うコントロールは抑えてあると思いますが。ちなみに、これをやれば Page側ではフォントの設定はいらないはずです。
<!--アプリケーション リソース-->
<Application.Resources>
<FontFamily x:Key="PhoneFontFamilyNormal">/プロジェクト名;component/HuiFontP29.ttf#HuiFontP</FontFamily>
<!-- ここから下をコピペ -->
<Style TargetType="ListBoxItem">
<!--ホントはContentControlFontFamily-->
< Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilyNormal}"/>
</Style>
<Style TargetType="Button">
<!--ホントはSemiBold-->
< Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilyNormal}"/>
</Style>
<Style TargetType="CheckBox">
<Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilyNormal}"/>
</Style>
<Style TargetType="RadioButton">
<Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilyNormal}"/>
</Style>
<Style TargetType="PasswordBox">
<Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilyNormal}"/>
</Style>
<Style TargetType="TextBox">
<Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilyNormal}"/>
</Style>
<Style TargetType="TextBlock">
<Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilyNormal}"/>
</Style>
<!-- ここまでコピペ -->
</Application.Resources>
ただ、タイトルだけがまだ駄目なんですよねー。これで行けそうなんだけど。デザイン上は変わってるんだけど、実行するとNG。
<!--全てのページのタイトルも変えるなら-->
< Style x:Key="PhoneTextTitle1Style" TargetType="TextBlock">
<Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilyNormal}"/>
<Setter Property="FontSize" Value="{StaticResource PhoneFontSizeExtraExtraLarge}"/>
< /Style>
< Style x:Key="PhoneTextNormalStyle" TargetType="TextBlock">
<Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilyNormal}"/>
< /Style>
Comments
Anonymous
May 12, 2013
それぞれのStyleにBaseOnで元のスタイルを指定していればもっといいかもしれませんね(^^)Anonymous
May 13, 2013
BaseOn スタイルはここには定義されていないので、BaseOn を指定するには BaseOn対象の定義を持ってこなければならなくなります。そうなってくるとだんだん全コントロールのテーマ再定義みたいになって(簡単にフォントを定義する)という趣旨からは外れてしまいます。そうなったらApp.xaml ではなくてResourceDictionaryファイルを作るべきですし。なのでこれが一番シンプルな型になります。