在Textblock中显示HTML实体

时间:2013-06-28 22:35:32

标签: wpf xaml html-entities font-awesome

我正在尝试使用icon-lightbulb ()输出FontAwesome图标作为权利。如果我将其硬编码为Text="",但是当我将此字符串存储在ObservableCollection内以进行绑定时,我只收到一个以xf..开头的字符串

问题也发生在&,但未转换为&

我已尝试使用建议的in this article - 它适用于&但不适用于FontAwesome图标。

有没有人知道为实现这一目标需要做些什么?

实施

我已将FontAwesome字体安装到我的系统上,然后将其嵌入到我的Visual Studio解决方案中以供使用。

我正在使用TextBlock将其绑定到ObservableCollection

中的字段
<TextBlock FontFamily="/OceanView;component/Resources/Fonts/#FontAwesome" FontSize="18px" HorizontalAlignment="Left" Text="{Binding Path=Image}" VerticalAlignment="Center" Foreground="#FF4A8BC2" />

然后我添加到Collection

NavigationInit.Navigations.Add(new Navigation { Name = "IMAGES", Image = "&#xf187;" });

3 个答案:

答案 0 :(得分:4)

XML实体对应于Unicode代码点f187,即十进制的61831。因此,您可以使用System.Char.ConvertFromUTF32创建一个包含具有此代码点的字符的String。

在代码中:

NavigationInit.Navigations.Add(new Navigation { Name = "IMAGES", Image = System.Char.ConvertFromUtf32(61831) });

答案 1 :(得分:0)

还有另一种方法可以将此代码转换为int然后转换为字符。我在转换器中使用它。它对我有用。

   Navigations.Add(new Navigation { Name = "IMAGES", Image = (char)((int)0xf187) });

答案 2 :(得分:0)

这两个发布的答案实际上都不是在C#中处理此问题的正确方法。 XAML中的语法Text="&#xf0eb;"只是一种编码具有代码点0xf0eb的字符的方法。 C#也有字符文字,它只使用不同的语法:

NavigationInit.Navigations.Add(new Navigation { Name = "IMAGES", Image = "\uf0eb" });

请注意,上面使用了问题文本中描述的字符。实际的代码示例使用不同的代码示例。它的语法完全相同,只是使用不同的值:

NavigationInit.Navigations.Add(new Navigation { Name = "IMAGES", Image = "\uf187" });

这比在运行时调用ConvertFromUtf32()方法要好得多(编译器解释字符值,因此已编译的字符串已经是必需的),或者将值转换为{{1 }}和int当你真正想要的是一个字符串时。