使用http:\\ URL的WPF图像UriSource和数据绑定

我在WPF用户控件中显示带有Web URL的图像时遇到问题。 我已经解决了2008年8月在本网站上提出的类似问题的所有建议( 图像UriSource和数据绑定 ),但这些建议都没有奏效。

我想做的是:

     

ImageFilePathUri是一个从字符串路径创建的Uri:

 public Uri ImageFilePathUri { get { return new Uri(this.ImageFilePath); } } } 

这样就必须设置“Property’UriSource’或属性’StreamSource’。” 错误如预期。

我也尝试过使用值转换器:

 public class ImageConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { var image = new BitmapImage(); image.BeginInit(); if (value != null) { image.UriSource = new Uri((string)value); } image.DecodePixelWidth = 50; image.EndInit(); return image; } } 

但是,使用以下方法绑定它:

  

不显示图像。

在控件构造函数和/或控件Loaded事件中以编程方式加载图像的进一步尝试也没有奏效:

 if (this.MemberRollItemViewModel.Member != null) { var image = new BitmapImage(); image.BeginInit(); image.UriSource = new Uri(this.MemberRollItemViewModel.Member.ImageFilePath); image.DecodePixelWidth = 50; image.EndInit(); this.MemberImage.Source = image; } 

有一件事是将图像保存到本地文件路径并显示:

      

这显然仅在调试问题时有用,而不是解决方案。 相同的代码但用http地址替换本地文件路径不起作用。

    

更新:

这是MemberImage属性实现。

 public BitmapImage MemberImage { get { var image = new BitmapImage(); if (this.Member != null) { WebRequest request = WebRequest.Create(new Uri(this.Member.ImageFilePath, UriKind.Absolute)); request.Timeout = -1; WebResponse response = request.GetResponse(); Stream responseStream = response.GetResponseStream(); BinaryReader reader = new BinaryReader(responseStream); MemoryStream memoryStream = new MemoryStream(); byte[] bytebuffer = new byte[BytesToRead]; int bytesRead = reader.Read(bytebuffer, 0, BytesToRead); while (bytesRead > 0) { memoryStream.Write(bytebuffer, 0, bytesRead); bytesRead = reader.Read(bytebuffer, 0, BytesToRead); } image.BeginInit(); memoryStream.Seek(0, SeekOrigin.Begin); image.StreamSource = memoryStream; image.EndInit(); } return image; } } 

更新:

这是我在视图中绑定到控件的方式:

  

MemberImage是我上面给出的属性。 正在设置我的数据上下文,因为正在运行该属性,它只是不返回图像。

WebURL不能作为BitmapImage的UriSource属性的源提供。 如果是weburl,则需要在本地下载该映像并将该路径绑定到UriSource。 见下文

http://blogs.windowsclient.net/cennest/archive/2010/03/26/code-for-keeps-wpf-silverlight-retrieve-images-from-db-url.aspx

更新:

 void MainWindow_Loaded(object sender, RoutedEventArgs e) { var image = new BitmapImage(); int BytesToRead=100; WebRequest request = WebRequest.Create(new Uri("http://sofzh.miximages.com/c%23/f", UriKind.Absolute)); request.Timeout = -1; WebResponse response = request.GetResponse(); Stream responseStream = response.GetResponseStream(); BinaryReader reader = new BinaryReader(responseStream); MemoryStream memoryStream = new MemoryStream(); byte[] bytebuffer = new byte[BytesToRead]; int bytesRead = reader.Read(bytebuffer, 0, BytesToRead); while (bytesRead > 0) { memoryStream.Write(bytebuffer, 0, bytesRead); bytesRead = reader.Read(bytebuffer, 0, BytesToRead); } image.BeginInit(); memoryStream.Seek(0, SeekOrigin.Begin); image.StreamSource = memoryStream; image.EndInit(); myImage.Source = image; }