我正在尝试制作一个带有图标的网格。我将图标的字符串表示存储在数据库中,并尝试通过绑定到我的viewmodel上的Icon属性(字符串)在GridHub中显示这些图标。
当我使用这个xaml时,我得到了网格中显示的实际文本
<TextBlock Text="{Binding Icon}"
FontFamily="Segoe UI Symbol"
FontSize="100"
TextAlignment="Center"
VerticalAlignment="Top"
Foreground="DarkGray"
AutomationProperties.Name="Some Label"/>
但是这会按预期显示图标
<TextBlock Text=""
FontFamily="Segoe UI Symbol"
FontSize="100"
TextAlignment="Center"
VerticalAlignment="Top"
Foreground="DarkGray"
AutomationProperties.Name="Some Label"/>
我的模型看起来像:
public class PermissionGroup
{
/// <summary>
/// The unique identifier for the group.
/// </summary>
public string PermissionGroupId { get; set; }
/// <summary>
/// The name of the group
/// </summary>
public string Name { get; set; }
/// <summary>
/// The page associated with the permission group
/// </summary>
public string PageName { get; set; }
/// <summary>
/// The icon that will be shown on the PermissionHub page
/// </summary>
public string Icon { get; set; }
/// <summary>
/// A description of the permissions in the group
/// </summary>
public string Description { get; set; }
/// <summary>
/// The permissions associated with this permission group
/// </summary>
public List<Permission> Permissions { get; set; }
}
我的viewmodel只包含这些对象的列表。
在我的数据库中,我尝试存储以下内容:

char.Parse("\uE1D4")
)的结果并且这些都没有导致图标正确显示!
答案 0 :(得分:6)
您必须解码html编码的字符串。例如,您可以尝试这个非常粗略的例子:
public class ViewModel
{
public PermissionGroup PG {get; set;}
public ViewModel()
{
PG = new PermissionGroup();
PG.Icon= System.Net.WebUtility.HtmlDecode("");
}
}
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
this.DataContext = new ViewModel();
}
}
<TextBlock Text="{Binding Path=PG.Icon}" FontFamily="Segoe UI Symbol"/>
或
<Style x:Key="Segoe">
<Setter x:Name="Segoe" Property="TextElement.FontFamily" Value="Resources/#Segoe UI Symbol" />
</Style>
<TextBlock Text="{Binding PG.Icon}"
Style="{DynamicResource Segoe}"
如果您需要字体查看器here,则可以使用字体查看器。
编辑:无论如何,unicode转义序列应该比html编码更好,这就是为什么我建议用字体查看器仔细检查并将字体ttf作为资源链接。 您还可以添加一个按钮来分析xaml文本的unicode转换,直接输入时不进行绑定。像这样的东西
private void Button_Click(object sender, RoutedEventArgs e)
{
byte[] stringBytes = Encoding.Unicode.GetBytes(txname.Text);
char[] stringChars = Encoding.Unicode.GetChars(stringBytes);
StringBuilder builder = new StringBuilder();
Array.ForEach<char>(stringChars, c => builder.AppendFormat("\\u{0:X}", (int)c));
Debug.WriteLine(builder);
}