我想这应该很容易,但是我得到一堆方盒而不是我需要的图标。
最初我在xaml中编写了一个菜单:
code omitted
<ListBoxItem Name="menuHome" >
<StackPanel Orientation="Horizontal">
<TextBlock FontFamily="Segoe MDL2 Assets" Text="" FontSize="16" VerticalAlignment="Center" />
<TextBlock Text="Home" FontSize="16" VerticalAlignment="Center" Padding="15,0,0,0"/>
</StackPanel>
</ListBoxItem>
code omitted
我现在必须动态创建此菜单,所以我有以下内容:
ListBoxItem menuHome = new ListBoxItem();
StackPanel menuHomeStackPanel = new StackPanel() { Orientation = Orientation.Horizontal };
menuHomeStackPanel.Children.Add(new TextBlock() { FontFamily = new FontFamily("Segoe MDL2 Assets"), FontSize = 16, VerticalAlignment = VerticalAlignment.Center, Text = "" });
menuHomeStackPanel.Children.Add(new TextBlock() { FontSize = 16, VerticalAlignment = VerticalAlignment.Center, Text = "Home", Padding = new Thickness(15, 0, 0, 0) });
menuHome.Content = menuHomeStackPanel;
menuHome.Name = "menuHome";
IconsListBox.Items.Add(menuHome);
除了Segoe MDL2 Assets字体之外,这几乎让我一样,可以在下面的截图中看到:
任何想法 - 可能很简单......?
答案 0 :(得分:29)

是一个XML字符实体。在您的原始XAML中,它由XML解析器自然解析,XML解析器通过XML解析规则将子字符串转换为单个16位Unicode字符。当框架创建TextBlock
控件时,
早已转换为单个Unicode字符。
但是现在你已经有了这个C#代码。该字符串由C#解析器解析,其规则称为完全普通的八个 Unicode字符串。
Text = ""
你传递了八个字符的东西,只有XML解析器可以理解 - 但是不再涉及XML解析器。控件在您选择的字体中显示这八个字符,并且字体没有字形,因此它显示八个空框。
C#有an equivalent notation for specifying Unicode characters in a string literal。而不是&#x
前缀和';' postfix,您只需使用\x
为四位十六进制字符代码添加前缀。相同的十六进制代码,但是告诉这个特定解析器的一种不同方式(从技术上讲,词法分析器 - 但是现在不要去那里)这四个十六进制字符意味着特殊的东西。
所以试试这个:
Text = "\xE10F"
但其中任何一种都可以起作用; C#有更多的方法来表示字符串文字之外的整数:
Text = Char.ConvertFromUtf32(0xE10F);
// Same value, in base 10
Text = Char.ConvertFromUtf32(57615);