using System.Windows; using System.Windows.Controls; using System.Windows.Media; namespace HandyControl.Controls; public class ImageAttach { public static readonly DependencyProperty SourceFailedProperty = DependencyProperty.RegisterAttached( "SourceFailed", typeof(ImageSource), typeof(ImageAttach), new FrameworkPropertyMetadata(default(ImageSource), FrameworkPropertyMetadataOptions.Inherits, OnSourceFailedChanged)); private static void OnSourceFailedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (d is Image image) { if (e.NewValue is ImageSource) { image.ImageFailed += Image_ImageFailed; } else { image.ImageFailed -= Image_ImageFailed; } } } private static void Image_ImageFailed(object sender, ExceptionRoutedEventArgs e) { if (sender is Image image) { image.SetCurrentValue(Image.SourceProperty, GetSourceFailed(image)); image.ImageFailed -= Image_ImageFailed; } } public static void SetSourceFailed(DependencyObject element, ImageSource value) => element.SetValue(SourceFailedProperty, value); public static ImageSource GetSourceFailed(DependencyObject element) => (ImageSource) element.GetValue(SourceFailedProperty); }