2015-08-26 4 views
5

Sto provando a collegare la proprietà PlayerFramework.MediaPlayer.CanPause a un pulsante nell'app universale di Windows 10. Funziona usando il font predefinito, ma quando passo a Segoe MDL2 per ottenere quelle fantasiose icone il pulsante mostra spazzatura.Convertitore che restituisce l'icona di Segoe MDL2 dopo l'associazione non funziona

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

... 

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

Questo è dal convertitore:

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

... e questo dallo stile tasto:

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

Dopo aver disattivato il pulsante proprietà Setter mostra il valore atteso

&#xE102; 

quale, dir impostato come contenuto del pulsante, mostra il simbolo di riproduzione.

Qualche idea sul perché questo non funziona?

modifica: copia il carattere dalla tabella dei caratteri e restituirlo funziona.

risposta

10

&#xE102; è una sequenza di caratteri unicode di fuga in XML (e quindi anche in XAML). In C# è scritto come \uE102.

Così il convertitore deve restituire stringhe (o caratteri) con una corretta C# unicode character escape sequences:

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

dovete restituire un carattere non una stringa:

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

argh così facile, sta funzionando - grazie mille! – Rob

+0

"Devi restituire un char non una stringa" non è vero. Il problema non è se si tratta di una stringa o di un carattere, è solo il modo in cui le sequenze di escape unicode sono scritte in C#. Mentre '& # xE102;' è XML (o XAML), è '\ uE102' in C#, indipendentemente dal fatto che sia in una stringa o in un singolo carattere. Il tuo convertitore potrebbe restituire anche "" \ uE102 "'. Vedi anche [questa risposta] (http://stackoverflow.com/a/31976379/1136211). – Clemens

Problemi correlati