在WPF中显示数据的URL

问题描述:

我正在尝试创建从服务中获取数据的WPF应用程序。数据是图片网址。有时服务返回Data URLs在WPF中显示数据的URL

如果我试图到该网址绑定到图像控制,如:

<Image Source="{Binding URL}" /> 

它的工作进行定期的URL,但不显示数据的URL。

有没有什么办法可以在WPF控件中显示数据URL?

+0

你可以创建一个值转换器来解释数据url并将其转换为图像可以读取的流 – Nkosi

+0

你能告诉我一个如何做的例子吗? – nrofis

创建一个值转换器,它的base64数据转换为BitmapImage

public class DataUrlConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var data = (string) value; 
     var base64Data = Regex.Match(data, @"data:image/(?<type>.+?),(?<data>.+)").Groups["data"].Value; 
     var binData = System.Convert.FromBase64String(base64Data); 

     var image = new BitmapImage(); 
     using (var mem = new MemoryStream(binData)) 
     { 
      image.BeginInit(); 
      image.CreateOptions = BitmapCreateOptions.PreservePixelFormat; 
      image.CacheOption = BitmapCacheOption.OnLoad; 
      image.StreamSource = mem; 
      image.EndInit(); 
     } 
     image.Freeze(); 
     return image; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

然后创建一个转换器资源:

<Window.Resources> 
    <local:DataUrlConverter x:Key="DataUrlConverter"></local:DataUrlConverter> 
</Window.Resources> 

,并使用它像这样:

<Image Source="{Binding URL, Converter={StaticResource DataUrlConverter}}" />