使用XAML字体家族会导致某些Unicode字符无法正常显示

4
我试图在 XAML TextBlock 中显示多种 Unicode 字符,不需要任何特定属性:
<TextBlock Text="{Binding MyString}" Foreground="Black" />

这在我的Windows 8.1系统上对所有脚本都有效,但对于表情符号字符无效:

Latin OK Emoji Broken Cyrillic OK

由于这些符号在Segoe UI Symbol字体中可用,因此我只需将其添加到FontFamily中:

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

然而,现在一些西里尔字母的符号已经损坏:

Latin OK Emoji OK Cyrillic Broken

所以我尝试启用多种字体,包括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

我该怎么修复这个问题?难道不是应该有一个合适的备选字体来支持所有字符吗?如果我没有指定FontFamily,那么我的TextBlock会使用什么呢?
1个回答

1
我终于成功修复了。看起来需要以下操作:
  • 除了Segoe UI Symbol之外,还需要Segoe UI
  • 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" />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接