Конвертер, возвращающий значок 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 ответов

- это 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';
}