2015-08-26 16 views
5

Tôi đang cố gắng ràng buộc thuộc tính PlayerFramework.MediaPlayer.CanPause Thuộc tính cho một Nút trong cửa sổ của tôi 10 ứng dụng toàn cầu. Điều này làm việc bằng cách sử dụng phông chữ mặc định, nhưng khi tôi chuyển sang Segoe MDL2 để có được những biểu tượng lạ mắt, nút này hiển thị rác.Chuyển đổi trở về biểu tượng Segoe MDL2 sau khi ràng buộc không hoạt động

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

... 

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

Đây là từ bộ chuyển đổi:

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

... và điều này từ nút phong cách:

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

Sau khi vô hiệu hóa tài sản Setter nút cho thấy giá trị dự kiến ​​

&#xE102; 

, dir ectly đặt làm nội dung nút, hiển thị biểu tượng phát.

Mọi ý tưởng tại sao điều này không hiệu quả?

chỉnh sửa: Sao chép ký tự từ bảng ký tự và trả lại ký tự không hoạt động.

Trả lời

10

&#xE102; là một chuỗi ký tự unicode thoát trong XML (và do đó cũng trong XAML). Trong C# nó được viết là \uE102.

Vì vậy, công cụ chuyển đổi nên trả lại chuỗi (hoặc ký tự) với đúng C# unicode character escape sequences:

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

Bạn cần phải trả lại một char không phải là một chuỗi:

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

argh dễ dàng như vậy, nó làm việc - cảm ơn rất nhiều! – Rob

+0

"Bạn phải trả lại một char không phải là một chuỗi" là không đúng sự thật. Vấn đề không phải là nếu nó là một chuỗi hoặc một char, nó chỉ là cách trình tự thoát unicode được viết bằng C#. Trong khi '& # xE102;' là XML (hoặc XAML), nó là '\ uE102' trong C#, bất kể nó có trong một chuỗi hay một ký tự đơn. Bộ chuyển đổi của bạn cũng có thể trả về '" \ uE102 "'. Xem thêm [câu trả lời này] (http://stackoverflow.com/a/31976379/1136211). – Clemens

Các vấn đề liên quan