如果Source指向实际图像,则下面的XAML可以正常工作。
<Image Source="http://somewhere.com/somewhere.png" />
但如果Source是来自url shortner服务的重定向,则无法加载图像。
有没有一种简单的方法可以解决这个问题,还是我必须自己去兔子洞并处理重定向?
答案 0 :(得分:2)
由于AllowAutoRedirect
标志对于WebClient实例设置为true
(请参阅备注here),以下内容可能有效,并且可能是处理重定向的最简单方法。但是请注意,我没有测试它,因为我手头没有重定向的图像URL。
var url = ...
var buffer = (new WebClient()).DownloadData(url);
var bitmap = new BitmapImage();
using (var stream = new MemoryStream(buffer))
{
bitmap.BeginInit();
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.StreamSource = stream;
bitmap.EndInit();
}
image.Source = bitmap;
如果有效,您可以将此代码放在绑定转换器中。
说完这一切之后,我希望WPF的内置类型转换器(从URL字符串到ImageSource)也可以使用HttpWebRequest或WebClient。对于这两种情况,默认行为是允许重定向。因此,您的案例中的重定向可能因其他原因而失败。