2015-08-26 13 views
5

Próbuję powiązać właściwość PlayerFramework.MediaPlayer.CanPause z przyciskiem w mojej uniwersalnej aplikacji systemu Windows 10. Działa to przy użyciu domyślnej czcionki, ale kiedy przełączam się na Segoe MDL2, aby uzyskać te fantazyjne ikony, przycisk pokazuje śmieci.Powracająca konwerter ikona MDL2 Segoe po związaniu nie działa

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

... 

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

To jest z konwerterem:

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

... i to od przycisku styl:

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

po wyłączeniu właściwość Setter przycisk pokazuje wartość oczekiwaną

&#xE102; 

która, dir ectly ustawiony jako zawartość przycisku, pokazuje symbol odtwarzania.

Wszelkie pomysły, dlaczego to nie działa?

edit: Kopiowanie postaci ze stołu postaci i zwracanie jej działa.

Odpowiedz

10

&#xE102; jest ciągiem znaków Unicode escape w XML (a więc także w XAML). W języku C# jest napisane jako \uE102.

więc przetwornica powinna wrócić ciągi znaków (lub) z właściwego C# unicode character escape sequences:

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

Trzeba zwrócić char nie ciąg:

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

argh tak łatwe, że to działa - dzięki! – Rob

+0

"Musisz zwrócić znak, a nie ciąg" nie jest prawdą. Problem nie polega na tym, że jest to ciąg znaków lub znak, tak po prostu sekwencje ucieczki Unicode są napisane w języku C#. Chociaż '& # x102;' to XML (lub XAML), to '\ uE102' w języku C#, niezależnie od tego, czy jest to ciąg znaków, czy pojedynczy znak. Twój konwerter może równie dobrze zwrócić '" \ uE102 "'. Zobacz także [tę odpowiedź] (http://stackoverflow.com/a/31976379/1136211). – Clemens

Powiązane problemy