Wie ändere ich eine Bildquelle dynamisch von CodeBehind in WPF mit einem Bild in Properties.Resources?

Ich habe eine WPF-Anwendung, die dem Benutzer Feedback zu einem internen Status geben muss. Der Entwurf soll drei Bilder haben, sie Rot, Gelb und Grün nennen. Je nach Status wird jeweils eines dieser Bilder angezeigt. Hier sind die Punkte:

Die drei Bilder befinden sich in Properties.Resources im Code-BehindEs wird immer nur eines der Bilder angezeigt.Die Statusänderung stammt von einem Prozess im Code-Behind und nicht vom Benutzer.Ich möchte ein Bildsteuerelement binden, damit ich das Bild von Code-Behind ändern kann.

Ich gehe davon aus, dass ich einen Bildkonverter benötige, um das JPG-Bild in eine Bildquelle umzuwandeln, z. B .:

[ValueConversion(typeof(System.Drawing.Bitmap), typeof(ImageSource))]
public class BitmapToImageSourceConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var bmp = value as System.Drawing.Bitmap;
        if (bmp == null)
            return null;
        return System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
                    bmp.GetHbitmap(),
                    IntPtr.Zero,
                    Int32Rect.Empty,
                    BitmapSizeOptions.FromEmptyOptions());
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}

Ich würde es vorziehen, die Bilder während der Initialisierung einmal zu konvertieren und eine Liste der Bildquellen zu führen. Ich gehe auch davon aus, dass ich eine Abhängigkeitseigenschaft zum Binden des Steuerelements benötige, bin mir jedoch nicht sicher, wie ich das mit dieser Liste von Bildquellen einrichten soll:

    // Dependancy Property for the North Image
    public static readonly DependencyProperty NorthImagePathProperty
        = DependencyProperty.Register(
            "NorthImagePath",
            typeof(ImageSource),
            typeof(MainWindow),
            new PropertyMetadata("**Don't know what goes here!!!**"));

    // Property wrapper for the dependancy property
    public ImageSource NorthImagePath
    {
        get { return (ImageSource)GetValue(NorthImagePathProperty); }
        set { SetValue(NorthImagePathProperty, value); }
    }

Antworten auf die Frage(1)

Ihre Antwort auf die Frage