2015-08-26 1 views
5

Ich versuche, die PlayerFramework.MediaPlayer.CanPause-Eigenschaft an einen Button in meiner Windows 10 Universal App zu binden. Dies funktioniert mit der Standardschriftart, aber wenn ich zu Segoe MDL2 wechsle, um diese ausgefallenen Symbole zu erhalten, zeigt die Schaltfläche Müll an.Konverter, der das Symbol von Segoe MDL2 nach der Bindung zurückgibt, funktioniert nicht

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

... 

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

Dies ist aus dem Konverter:

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

... und dies vom Button Stil:

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

Nachdem die Setter-Eigenschaft der Schaltfläche zu deaktivieren zeigt den erwarteten Wert

&#xE102; 

welche, dir genau wie der Knopf Inhalt, zeigt das Play-Symbol.

Irgendwelche Ideen, warum das nicht funktioniert?

edit: Das Zeichen aus der Zeichentabelle kopieren und zurückgeben funktioniert.

Antwort

10

&#xE102; ist eine Unicode-Zeichen-Escape-Sequenz in XML (und damit auch in XAML). In C# wird es als \uE102 geschrieben.

So sollte der Konverter geben Strings zurück (oder Zeichen) mit der richtigen C# unicode character escape sequences:

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

Sie haben ein Zeichen keinen String zurück:

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

argh so einfach, es funktioniert - vielen Dank! – Rob

+0

"Sie müssen ein Zeichen nicht eine Zeichenfolge zurückgeben" ist nicht wahr. Das Problem ist nicht, ob es eine Zeichenfolge oder ein Zeichen ist, es ist nur die Art wie Unicode-Escape-Sequenzen in C# geschrieben werden. Während '& # xE102;' XML (oder XAML) ist, ist es in C# '\ uE102', unabhängig davon, ob es sich um eine Zeichenfolge oder ein einzelnes Zeichen handelt. Ihr Konverter kann auch "\ uE102" 'zurückgeben. Siehe auch [diese Antwort] (http://stackoverflow.com/a/31976379/1136211). – Clemens