如果加载的图像不存在,如何显示默认的“图像”?

时间:2014-05-22 13:56:58

标签: c# wpf image io

我正在创建一个用户可以通过某个路径加载图像的应用程序。然后,存储加载图像的路径,下次用户想再次打开文档时,将根据路径加载图像。

但是,我想处理,以防前一个路径无效(图像被移动/删除),那么它不是一个错误提交,但是,这种对象显示:

enter image description here

我想知道是否有任何方法可以让应用程序在没有该图像的情况下执行此操作。我的意思是,也许C#对于那种"缺失"图像?

谢谢。

P.S。并且,那"失踪"上面的图像确实是一个“缺失”的图像。图像。

2 个答案:

答案 0 :(得分:3)

您可以创建自定义Converter来为您执行此操作。为您添加属性,以便能够设置默认的Image路径:

[ValueConversion(typeof(string), typeof(ImageSource))]
public class EmptyImageToImageSourceConverter : IValueConverter
{
    /// <summary>
    /// Converts an empty string value into the DefaultImagePath property value if it exists, or a DependencyProperty.UnsetValue otherwise.
    /// </summary>
    public string DefaultImagePath { get; set; }

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value == null || targetType != typeof(ImageSource)) return DependencyProperty.UnsetValue;
        string imagePath = value.ToString();
        return imagePath.IsNullOrEmpty() ? DefaultImagePath.IsNullOrEmpty() ? DependencyProperty.UnsetValue : DefaultImagePath : imagePath;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return DependencyProperty.UnsetValue;
    }
}

然后你可以像这样使用它:

<Converters:EmptyImageToImageSourceConverter x:Key="EmptyImageToImageSourceConverter" 
    DefaultImagePath="pack://application:,,,/AppName;component/Images/DefaultImage.png" />

请注意,此Converter适用于string个上述文件路径,而不是BitMapImageImageSource个对象。它还需要您提供要显示的默认图像。

答案 1 :(得分:2)

您可以使用图像控件的ImageFailed-Event。

如果事件被提升,请设置错误图像。

<Image src= ImageFailed="OnImageFailed" />