在代码中更改 UWP 文本时,某些字体无法正确显示,尤其是图标字体

Posted

技术标签:

【中文标题】在代码中更改 UWP 文本时,某些字体无法正确显示,尤其是图标字体【英文标题】:UWP Text can't show correctly in some font when change it in code, especially icon font 【发布时间】:2019-01-03 16:06:16 【问题描述】:

当我想更改我的字体图标背景时,它们无法很好地显示。但是,当我只是不更改并且它们保留我在 XAML 中设置的原始值时,它们很好。

我觉得可能是我字体的问题,所以我尝试了其他字体,最后我发现只有像“Segoe UI Emoji”“Segoe UI Symbol”和“Segoe UI Symbol”这样的图标字体出错了。其他字体,如“Verdana”或“Arial”,效果很好。

我使用 TextBlock 控件并在 XAML 中设置它的 FontFamily 属性,然后在 C# 中更改它的文本属性背景。我也尝试了 FontIcon Control,可悲的是,它也不能很好地工作。

我的 UWP 最小版本和目标版本都是 10240,我是在 Visual Studio 2015 中编写的。

这是我的代码:

xaml

<TextBlock  Name="IconTextBlock"  Text="&#xE10B;" FontFamily="Segoe MDL2 Assets"/>

C#

private void ReFreshButton_Click(object sender, RoutedEventArgs e)
 
    IconTextBlock.Text = "&#xE106;";

【问题讨论】:

【参考方案1】:

问题似乎在于您如何设置字符而不是字体。

XAML 和 C# 使用不同的格式来按数字表示 Unicode 字符。您的 C# 代码 sn-p 使用 XAML 字符串文字格式 ("&amp;#xE106;") 而不是 C# 字符串文字格式 ("\uE106"),对于 C#,XML 格式只是文本。

您没有将字符串设置为 Unicode 字符 E106(取消 X 标记),而是将其设置为实际字符串“”。这在“Segoe MDL2 Assets”中显示为框,因为该字体不包含正常的字母数字字符。如果您在调试器中查看字符串或使用正常使用的字体(例如 Verdana 或 Arial)显示它,您应该会看到字符串拼写为“”,而不是由取消字形表示。

要从 C# 中获得与从 Xaml 中获得的相同行为,请根据 C# 的 string syntax 设置字符串文字:

IconTextBlock.Text = "\uE106";

【讨论】:

以上是关于在代码中更改 UWP 文本时,某些字体无法正确显示,尤其是图标字体的主要内容,如果未能解决你的问题,请参考以下文章

带有属性文本字体的 ios 标签无法正确显示

RichEditBox (UWP) 在设置 Rtf 文本时忽略字体和前景

如何在 Swift 中更改 UILabel 文本某些部分的字体属性? [复制]

iPhone 的啥代码,以便用户可以通过单击某些按钮来更改文本视图中的字体大小?

C# UWP 无法用代码显示用户控件

更改字体系列后,UIWebView 文本首先呈现不正确