我正在尝试将图像的网址(BigImageURL)与图像控件绑定。它工作得很好,但对于一些图像我得到HTTP 403错误(发现使用提琴手),显然图像不会显示。我希望显示静态图像,以防http网址未解析。
<Image x:Name="HoverImage" Source="{Binding BigImageURL}" />
我试着写一个转换器
public class UriToImageSourceConverter : IValueConverter
{
public object Convert(object value, Type targetType,object parameter, CultureInfo culture)
{
BitmapImage image = null;
try
{
image = new BitmapImage(new Uri(value.ToString()));
}
catch (Exception ex)
{
image= new BitmapImage(new Uri("..<mydefaultimageUrl>.."));
}
return image;
}
...
}
<Image x:Name="HoverImage" Source="{Binding BigImageURL,Converter={StaticResource myUriToImageSourceConverter}" />
没用!! 即使图像URL无法访问,转换器也没有抛出任何异常。我不认为它在创建BitmapImage时尝试解析地址或读取图像流
尝试设置FallbackValue但它也不起作用。
<Image x:Name="HoverImage" Source="{Binding BigImageURL,FallbackValue=DefaultUrl}"/>
任何指针??
提前致谢
答案 0 :(得分:1)
实际上你必须做这样的事情
<Image x:Name="HoverImage" Source="{Binding BigImageURL}"
ImageFailed="HoverImage_ImageFailed" />
并添加事件处理程序
private void HoverImage_ImageFailed(object sender, ExceptionRoutedEventArgs e)
{
var expection = e.ErrorException; // Here we could know what happend
HoverImage.Source = someDefaultUrl; // And here we add default Url...
}
在silverligth中,您必须在事件的帮助下处理装载程序图像和图像异常...不要在这种情况下使用数据绑定..