使用XAML字体系列会破坏一些Unicode字形

时间:2015-03-10 13:33:15

标签: c# xaml unicode fonts

我试图在没有任何特定属性的XAML TextBlock中显示各种Unicode字符:

<TextBlock Text="{Binding MyString}" Foreground="Black" />

这适用于Windows 8.1系统上的所有脚本,但表情符号字符除外:

Latin OK Emoji Broken Cyrillic OK

由于 Segoe UI符号字体中提供了这些符号,我只需将其添加到FontFamily

<TextBlock Text="{Binding MyString}" Foreground="Black"
           FontFamily="Segoe UI Symbol" />

然而,现在一些西里尔符号被打破了:

Latin OK Emoji OK Cyrillic Broken

所以我尝试启用多种字体,包括composite fonts listed on MSDN

<TextBlock Text="{Binding MyString}" Foreground="Black"
           FontFamily="Lucida Sans Unicode, Lucida Grande, Segoe UI Symbol,
                       Open Sans, Arial, Microsoft Sans Serif, Tahoma,
                       Courier New, Times New Roman, Global User Interface,
                       Portable User Interface" />

但我得到了完全相同的结果:

Latin OK Emoji OK Cyrillic Broken

我该如何解决这个问题?是不是全局用户界面应该给我一个适合所有角色的回退?当我指定不TextBlock时,FontFamily可以使用什么?

1 个答案:

答案 0 :(得分:1)

我终于设法解决了这个问题。看来:

  • Segoe UI需要 Segoe UI Symbol
  • Segoe UI Symbol会搞乱一些字符,不会使用跟随它的字体;因此,它应该移到最后

以下字符串有效,现在我的所有字形都会呈现:

<TextBlock Text="{Binding MyString}" Foreground="Black"
           FontFamily="Segoe UI, Lucida Sans Unicode, Lucida Grande,
                       Open Sans, Arial, Microsoft Sans Serif, Tahoma,
                       Courier New, Times New Roman, Global User Interface,
                       Portable User Interface, Segoe UI Symbol" />