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

时间:2018-07-26 15:32:23

标签: c# xaml uwp

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

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

我使用TextBlock控件并在XAML中将其设置为FontFamily属性,然后在C#中更改其Text属性背景。我也尝试了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 个答案:

答案 0 :(得分:1)

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

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

不是将字符串设置为Unicode字符E106(取消X标记),而是将其设置为实际的字符串“&#xE106”。由于该字体不包含普通的字母数字字符,因此在“ Segoe MDL2资产”中显示为方框。如果您在调试器中查看该字符串或使用Verdana或Arial等常用字体显示该字符串,则应该看到该字符串的拼写为“&#xE106”,而不是用取消字形表示。

要获得与Xaml相同的C#行为,请为每个C#的string syntax设置字符串文字:

IconTextBlock.Text = "\uE106";