在代码中更改 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="" FontFamily="Segoe MDL2 Assets"/>
C#
private void ReFreshButton_Click(object sender, RoutedEventArgs e)
IconTextBlock.Text = "";
【问题讨论】:
【参考方案1】:问题似乎在于您如何设置字符而不是字体。
XAML 和 C# 使用不同的格式来按数字表示 Unicode 字符。您的 C# 代码 sn-p 使用 XAML 字符串文字格式 ("&#xE106;"
) 而不是 C# 字符串文字格式 ("\uE106"
),对于 C#,XML 格式只是文本。
您没有将字符串设置为 Unicode 字符 E106(取消 X 标记),而是将其设置为实际字符串“”。这在“Segoe MDL2 Assets”中显示为框,因为该字体不包含正常的字母数字字符。如果您在调试器中查看字符串或使用正常使用的字体(例如 Verdana 或 Arial)显示它,您应该会看到字符串拼写为“”,而不是由取消字形表示。
要从 C# 中获得与从 Xaml 中获得的相同行为,请根据 C# 的 string syntax 设置字符串文字:
IconTextBlock.Text = "\uE106";
【讨论】:
以上是关于在代码中更改 UWP 文本时,某些字体无法正确显示,尤其是图标字体的主要内容,如果未能解决你的问题,请参考以下文章
RichEditBox (UWP) 在设置 Rtf 文本时忽略字体和前景
如何在 Swift 中更改 UILabel 文本某些部分的字体属性? [复制]