Windows ストアアプリで合字処理が出た場合
#win8dev_jp
■ シリーズになっちゃいました。
- 問題の発生とその原因解説 → Windows ストアアプリで合字処理が出た場合
- まとめて処理する方法と解説 → Windows ストアアプリで合字処理回避を美しく処理する
- 最終的に最も簡単に処理する方法 → 合字回避定義を4クリックでプロジェクトに入れる方法
■ さて本題
Windows ストアアプリでフォントを変えたときにこんな風になってしまう場合があります。
※標準合字について追記しました。
なにか、違う会社に見えます。
ここには合字という文字合成をする処理が2種類発生してしまっています。
- マイクロが1文字になってしまっているのが随意合字
- ff がつながって表示されているのが標準合字
■ 発生状況
これは、TextBlock 等で以下の設定をした場合に起きる問題です。
- Yu Gothic や Yu Mincho を Meiryo をフォントして設定
- 標準で用意されている HeaderTextBlockStyle をスタイルとして設定
ただし、Grid Template などのタイトルなどにはデフォルトで設定されている
XAMLで見るとこの2点があることがポイントです。
<TextBlock
Text="マイクロソフト株式会社"
FontFamily =" Yu Gothic "
FontSize="48"
Style =" {StaticResource HeaderTextBlockStyle} "
/>
■ 原因
これは、HeaderTextBlockStyle の中に合字を有効にするプロパティが設定されているためです。
- 随意合字を有効にする Typography.DiscretionaryLigatures="True"
- 標準合字を有効にする Typography.StandardLigatures="True"
随意合字
Typography.DiscretionaryLigatures プロパティ
https://msdn.microsoft.com/ja-jp/library/system.windows.documents.typography.discretionaryligatures.aspx
標準合字
Typography.StandardLigatures プロパティ
https://msdn.microsoft.com/ja-jp/library/system.windows.documents.typography.standardligatures.aspx
■ 解決方法
回避するには前述の条件を外すのが簡単。下記のどちらかをやればよし。
- Yu Gothic や Yu Mincho を Meiryo をフォンとして使わない
- 標準で用意されている HeaderTextBlockStyle をスタイルとして使わない
ま、特に後者ですね。特にスタイルを必要としなければ外せばよいです。その際はフォントサイズを合わせておきましょう。
スタイル内の合字プロパティを無効にする
まぁ、でもそれでは、根本解決にはならないので、きちんとこのフォント装飾の設定を外す方法をご紹介します。
回避するには単純に TextBlock に各プロパティの無効設定を追記すればOKです。
- Typography.DiscretionaryLigatures="False"
- Typography.StandardLigatures=”False”
こんな感じですね。
<TextBlock
Text="マイクロソフト株式会社"
FontFamily="Yu Gothic"
Typography.DiscretionaryLigatures =" False "
Typography.StandardLigatures=”False”
FontSize="48"
Style="{StaticResource HeaderTextBlockStyle}"
/>
マイクロ や 株式会社 がきちんと4文字になり、ffの間も空いていることがわかります。
■ その他
なぜこんなものが入っているのか、誰得なのか?正直疑問はあると思いますが、それをここで論じてもしょうがないので、ひとまず解決のための情報として把握しておいてください。
遊ゴシックや遊明朝はうまく使うと美しいフォントです。ぜひ上記に注意して試してみてください。
ちなみに、遊明朝の場合、マイクロには随意合字は用意されておらず、株式会社にのみ随意郷地があるようです。標準合字はffにはないみたい。
この辺はフォントに依存するので難しいところです。たぶんMicrosoft チェックしているのは UIフォントについてのみだと思います。