Конвертер, возвращающий значок Segoe MDL2 после привязки, не работает

Я пытаюсь связать PlayerFramework.медиаплеер.Свойство 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 @"";
        // "play"
        return "";
    }

...и это от стиля кнопки:

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

после отключения свойства Setter кнопка показывает ожидаемое значение

что, прямо как кнопку контент, показывает символ Play.

есть идеи, почему это не работает?

edit: копирование символа из таблицы символов и его возврат действительно работают.

2 ответов


&#xE102; - это escape-последовательность символов Юникода в XML (и, следовательно, также в XAML). В C# это написано как \uE102.

таким образом, конвертер должен возвращать строки (или символы) с правильным escape-последовательности символов Юникода C#:

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

вы должны вернуть символ, а не строку:

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