【问题标题】:Xamarin.Forms Segoe Icon Code Binding in XAML UWP project Xamarin Native XamlXamarin.Forms Segoe 图标代码绑定在 XAML UWP 项目 Xamarin Native Xaml
【发布时间】:2018-09-12 18:30:51
【问题描述】:

我正在尝试将 Segoe 图标字体的代码从我的代码绑定到本机 TextBlock 我在视图中添加但我得到的是图标的十六进制代码而不是图标。

我不明白为什么会这样,代码如下:

<win:TextBlock Text="&#x1f47a;" FontSize="50" /> 

在上面的代码 sn-p 中,我的图标显示为我希望的那样,但是当我将相同的图标代码放入变量中并将其绑定到我的视图时,我不再获得图标了。

C#:

public string Icon { get; set; } = "&#x1f47a;";

XAML:

<win:TextBlock Text="{Binding Icon}" FontSize="50" />

其中,当我将代码直接添加到 XAML 时,我会直接获得图标。 我猜 Binding 会导致 XAML 不将代码解释为十六进制而是string。

【问题讨论】:

    标签: c# xaml xamarin xamarin.forms uwp


    【解决方案1】:

    XML(也包括 XAML)具有与 c# 不同的转义符号,因此您的图标不像 XAML 中那样转义

    public string Icon { get; set; } = "&#x1f47a;";
    

    使用 C# 转义符号:

    public string Icon { get; set; } = "\u1f47a";
    

    【讨论】:

    • 嗨,谢谢,但它不起作用,相反我看到一个有趣的字符(即:一个正方形和字母“a”)
    • 您确定要设置支持这些图标的字体吗?
    【解决方案2】:

    在 C# 中,不能使用 XML 转义序列,但还有一个问题 - 这个 Emoji 的 unicode 代码太高,因此无法使用 \u 转义序列表示,因此它只解析前四个数字作为一个字符并附加“a”作为另一个字符。

    例如,您可以在 Graphemica 上搜索表情符号,您可以看到它可以由一对 unicode 字符表示 - 0xD83D 0xDC7A。

    所以正确的代码是:

    public string Icon { get; set; } = "\ud83d\udc7a";
    

    另一种表示法是使用\U 转义序列,但它要求您在表情符号代码之前添加三个额外的零(以组成八位数代码)。

    public string Icon { get; set; } = "\U0001F47A";
    

    【讨论】:

    • 感谢您的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 2019-06-07
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多