图像源绑定到丢失的文件

时间:2010-04-30 10:15:56

标签: c# wpf image data-binding

如果缺少绑定路径文件,如何显示默认图像?

<Image  Source="{Binding DisplayedBook.ImagePath}" />

我的解决方案:使用转换器,检查图像是否存在并返回相应的路径。

5 个答案:

答案 0 :(得分:6)

如果你不想从ImagePath getter返回默认图像,那么另一种方法是返回null。

public string ImagePath
{
   get
   {
     return File.Exists(m_Path) ? m_Path : null;
   }
}

并在XAML中使用Binding的TargetNullValue属性

<Image  Source="{Binding DisplayedBook.ImagePath, TargetNullValue={StaticResource SomeImageResource}}" />

答案 1 :(得分:4)

如果您有与此XAML关联的代码隐藏(即非模板),您可以在ImageFailed事件上设置默认图像:

<Image  Source="{Binding ImagePath}" ImageFailed="Image_ImageFailed" />

和处理程序:

    private void Image_ImageFailed(object sender, ExceptionRoutedEventArgs e)
    {
        Image image = e.Source as Image;
        if (image != null)
            image.Source = new BitmapImage(new Uri("http://SomeDefaultImagePath.jpg"));
    }

答案 2 :(得分:1)

我不使用wpf,所以我不知道是否存在这样的特殊功能。

但我会在DisplayedBook.ImagePath的getter方法中实现这样的东西。它检查文件是否存在,如果没有返回某个默认图像的路径。

答案 3 :(得分:1)

你可以这样做:

获取路径中图像的路径。

if (!File.Exists(path))
{
    BitmapImage image = new BitmapImage();

    image.BeginInit();
    image.UriSource = new Uri(path);
    image.DecodePixelWidth = Convert.ToInt32(img.Width);
    image.EndInit();

    //Set the image corresponding to that bound
    this.img.Source = image;
}

答案 4 :(得分:0)

您还可以添加FallbackValue属性,该属性获取或设置当绑定无法返回值时要使用的值。