【问题标题】:Converter returning Segoe MDL2 icon after binding does not work绑定后转换器返回 Segoe MDL2 图标不起作用
【发布时间】:2015-08-26 03:42:15
【问题描述】:

我正在尝试将 PlayerFramework.MediaPlayer.CanPause 属性绑定到我的 Windows 10 通用应用程序中的按钮。这可以使用默认字体,但是当我切换到 Segoe MDL2 以获取那些花哨的图标时,按钮显示垃圾。

<mmppf:MediaPlayer x:Name="mediaElement">

...

<Button Name="btnPlay" 
        Style="{StaticResource transportStyle}"  Content="{Binding CanPause, ElementName=mediaElement, Converter={StaticResource CanPauseToPlayPauseConverter}}"/>

这是来自转换器:

public object Convert(object value, Type targetType, object parameter, string language)
    {
        bool canPause = (bool)value;
        if (canPause)
            return @"&#xE769;";
        // "play"
        return "&#xE102;";
    }

...这来自按钮样式:

<Style x:Name="transportStyle"  TargetType="Button">
       <!-- <Setter Property="FontFamily" Value="Segoe MDL2 Assets" />-->
</Style>

禁用Setter属性后,按钮显示预期值

&#xE102;

直接设置为按钮内容,显示播放符号。

任何想法为什么这不起作用?

编辑:从字符表中复制字符并返回它确实有效。

【问题讨论】:

    标签: xaml data-binding


    【解决方案1】:

    &amp;#xE102; 是 XML 中的 unicode 字符转义序列(因此也在 XAML 中)。在 C# 中,它被写为\uE102

    所以转换器应该返回带有正确 C# unicode 字符转义序列的字符串(或字符):

    public object Convert(object value, Type targetType, object parameter, string language)
    {
        return (bool)value ? "\uE769" : "\uE102";
    }
    

    【讨论】:

    • 请检查您的链接,它不再起作用了。谢谢!
    【解决方案2】:

    你必须返回一个字符而不是一个字符串:

    public object Convert(object value, Type targetType, object parameter, string language)
        {
            bool canPause = (bool)value;
            if (canPause)
                return '\xE769';
            // "play"
            return '\xE102';
        }
    

    【讨论】:

    • “你必须返回一个字符而不是一个字符串”不是真的。问题不在于它是一个字符串还是一个字符,而只是用 C# 编写 unicode 转义序列的方式。虽然 &amp;#xE102; 是 XML(或 XAML),但它在 C# 中是 \uE102,无论它是在字符串还是单个字符中。您的转换器也可以返回"\uE102"。另请参阅this answer
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 2011-04-16
    • 2017-06-16
    相关资源
    最近更新 更多