2011-03-16 77 views
2

我正在尝试将图像的网址(BigImageURL)与图像控件绑定。它主要工作正常,但对于一些图像我得到HTTP 403错误(发现使用提琴手),显然图像不显示。我想要显示一个静态图像,以防http url未解析。Silverlight图像绑定问题

<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}"/> 

任何指针?

在此先感谢

回答

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你必须处理与不加载图像和图像异常事件的帮助...不要使用数据绑定的情况下..

+0

谢谢Ai_boy,我华在视图模型中处理它,但这是一个不错的选择。 – 2011-03-16 15:33:58

+0

很伤心,但是Siverlight的设计就是这样。如果你想在“视图模型”中处理这个事件,请看MVVM light“eventToCommand”http://channel9.msdn.com/shows/SilverlightTV/Silverlight-TV-13 -MVVM-光工具包/ – 2011-03-16 15:38:36