Wie verweise ich auf Bildressourcen in XAML?


81

Ich habe ein ImageSteuerelement in ein Fenster eingefügt und möchte ein Bild anzeigen, das in einer Projektressourcendatei mit dem Namen "Resources.resx" gespeichert ist. Der Name des Bildes in der Ressourcendatei lautet "Suchen".

Könnte mir jemand zeigen, wie ich das machen könnte?

Antworten:


117

Wenn sich das Image in Ihrem Ressourcenordner befindet und seine Erstellungsaktion auf Ressource festgelegt ist. Sie können das Bild in XAML wie folgt referenzieren:

"pack://application:,,,/Resources/Search.png"

Angenommen, Sie haben keine Ordnerstruktur unter dem Ordner Ressourcen und es handelt sich um eine Anwendung. Zum Beispiel benutze ich:

ImageSource="pack://application:,,,/Resources/RibbonImages/CloseButton.png"

wenn ich einen Ordner mit dem Namen RibbonImages im Ordner Resources habe.


Was repräsentiert der 'Pack'-Namespace?
Hosea146

2
Hier ist Info über Pack Uri
Viv

2
Es ist schon eine Weile her, dass ich meiner Anwendung Bilder hinzugefügt habe ... Ich bin vielleicht hier abgenutzt, aber ich denke, Sie müssen möglicherweise Ihre Anwendung erstellen, bevor das Bild im WPF-Designer angezeigt wird.
Viv

3
Ich kann es momentan nicht testen, aber über den obigen MSDN-Link für referenzierte Assemblys heißt es use: "/ReferencedAssembly;component/Subfolder/ResourceFile.xaml". Dabei wäre "ReferencedAssembly" Ihr Assemblyname. Ich habe Code geschrieben wie: "/MyProgram.Namespace;component/Resources/imagename.png"
Viv

1
@wonea diese Arbeit für mich: "pack: // application: ,,, / YourAppName; component / Resources / FileDialog.png" mit Build-Aktion "Resource"
Antonio

30

Wenn Sie ein Bild im Ordner "Symbole" Ihres Projekts haben und dessen Erstellungsaktion "Ressource" lautet, können Sie wie folgt darauf verweisen:

<Image Source="/Icons/play_small.png" />

Das ist der einfachste Weg, dies zu tun. Dies ist der einzige Weg, den ich mir vorstellen könnte, wenn ich es nur vom Standpunkt der Ressourcen aus und ohne Projektdateien mache:

var resourceManager = new ResourceManager(typeof (Resources));
var bitmap = resourceManager.GetObject("Search") as System.Drawing.Bitmap;

var memoryStream = new MemoryStream();
bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Bmp);
memoryStream.Position = 0;

var bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.StreamSource = memoryStream;
bitmapImage.EndInit();

this.image1.Source = bitmapImage;

17
Hier gibt es eine geringfügige Abweichung: <Image Source="/Icons/play_small.png" />Beachten Sie den Schrägstrich am Anfang, dh schauen Sie in den Stammordner. Wenn sich die xaml-Datei nicht im Stammverzeichnis befindet, ist dies erforderlich, da ohne den Schrägstrich die Suche im selben Verzeichnis wie die xaml-Datei gestartet wird.
Greg Gum

8

Einer der Vorteile der Verwendung der Ressourcendatei besteht darin, über Namen auf die Ressourcen zuzugreifen, sodass sich das Bild und der Bildname ändern können, solange die Ressource auf dem neuesten Stand gehalten wird. Das richtige Bild wird angezeigt.

Hier ist ein sauberer Ansatz, um dies zu erreichen: Angenommen, Resources.resx befindet sich im Namespace 'UI.Images', fügen Sie die Namespace-Referenz wie folgt in Ihre xaml ein:

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:UI="clr-namespace:UI.Images" 

Stellen Sie Ihre Bildquelle folgendermaßen ein:

<Image Source={Binding {x:Static UI:Resources.Search}} /> Dabei ist 'Suche' der Name der Ressource.



3
Eigentlich scheint dies für Bilder nicht zu funktionieren, da die Ressourcen System.Drawing.Bitmap
Mark Sowul

4
  1. Fügen Sie Ihrem Projekt Ordner hinzu und fügen Sie Bilder über "Vorhandenes Element" hinzu.
  2. XAML ähnlich wie folgt: <Image Source="MyRessourceDir\images\addButton.png"/>
  3. F6 (Build)

<ImageBrush ImageSource = "Assets \ Placeholder.png" /> arbeitete für mich, danke
Varus Septimus

1a. Setzen Sie auf der Registerkarte Eigenschaften für die Datei BuildAction auf "Ressource"
Richard II
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.