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

7

Ich habe eine WPF-Anwendung, die dem Benutzer Feedback zu einem internen Status geben muss. Das Design soll drei Bilder haben, nennen sie Rot, Gelb und Grün. Eines dieser Bilder wird je nach Status zu einem bestimmten Zeitpunkt angezeigt. Hier sind die Punkte:

  • Die drei Bilder befinden sich in Properties.Resources im Code-Behind
  • Nur eines der Bilder wird gleichzeitig angezeigt.
  • Die Statusänderung kommt von einem Prozess in Code-Behind und nicht vom Benutzer.
  • Ich möchte ein Bild-Steuerelement binden, so dass ich das Bild von Code-Behind ändern kann.

Ich gehe davon aus, dass ich einen Bildkonverter brauche, um das JPG-Bild in eine Bildquelle wie:

zu ändern %Vor%

Ich würde es vorziehen, die Bilder während der Initialisierung einmal zu konvertieren und eine Liste von Bildquellen zu behalten. Ich nehme auch an, dass ich eine Abhängigkeitseigenschaft benötige, um das Steuerelement zu binden, aber ich bin nicht sicher, wie man das mit dieser Liste von Bildquellen einrichtet:

%Vor%     
dtaylor 21.02.2013, 15:55
quelle

1 Antwort

31

Obwohl eine Bildressource in einem WPF-Projekt eine System.Drawing.Bitmap -Eigenschaft in Resources.Designer.cs generiert, können Sie direkt eine BitmapImage von dieser Ressource. Sie müssen nur die Build-Aktion der Image-Datei auf Resource (anstelle des Standard None ).

Wenn Sie eine Datei Red.jpg im Ordner Resources Ihres Visual Studio-Projekts haben, sieht die Erstellung von BitmapImage wie folgt aus. Es verwendet ein WPF Pack Uri .

%Vor%

Wenn Sie ein Image -Steuerelement irgendwo in XAML wie folgt deklariert haben:

%Vor%

Sie können einfach die Eigenschaft Source des Bildes auf Ihre BitmapImage im Code dahinter setzen:

%Vor%

Wenn Sie die Eigenschaft Source durch Bindung festlegen möchten, können Sie eine Eigenschaft string erstellen, die den Image-URI zurückgibt. Die Zeichenfolge wird automatisch von einem integrierten BitmapImage TypeConverter konvertiert / a> in WPF.

%Vor%

In XAML würden Sie wie folgt an diese Eigenschaft binden:

%Vor%

Natürlich können Sie die Eigenschaft auch als Typ ImageSource

deklarieren %Vor%

und bind auf die gleiche Weise:

%Vor%

Jetzt können Sie Ihre Bilder vorladen und sie nach Bedarf in die Eigenschaft einfügen:

%Vor%

UPDATE: Schließlich müssen Ihre Bilder keine Ressourcen im Visual Studio-Projekt sein. Sie könnten einfach einen Projektordner hinzufügen, die Bilddateien in diesen Ordner kopieren und ihre Build-Aktion auf Resource setzen. Wenn Sie zum Beispiel den Ordner Images aufrufen, wäre der URI pack://application:,,,/Images/Red.jpg .

    
Clemens 21.02.2013, 17:06
quelle

Tags und Links