Ich habe ein Programm, das eine Reihe von Symbolen in einem "Icons" -Ordner enthält (die im Projekt mit Build Action = Resource enthalten sind).
In XAML kann ich auf diese Symbole mit Code wie <Image Source="../Icons/name.png"/>
("..") zugreifen, da XAML sich in einem anderen Unterordner befindet); Ich möchte jedoch dasselbe Bild in einem WinForms-Code im selben Projekt verwenden. Leider
gibt null
und
listet nur eine Reihe von * .resources-Dateien auf (eine für jede .resx und eine mit * .g.resources). Also, wie soll ich den Bildstrom bekommen?
Ich nahm an, dass ich die Bilder direkt in mein Projekt aufgenommen habe, damit ich sie direkt lesen kann. Aber dank Jacks Antwort konnte ich herausfinden, dass sie in einer "Ressourcendatei" namens "ProgramName.g.resources" in der Assembly versteckt sind. Um das Bild zu lesen, muss zuerst die Ressourcendatei geladen und dann die Bilddatei in der Ressourcendatei gesucht werden.
ResourceSet.GetObject
unterscheidet zwischen Groß- und Kleinschreibung, aber der Bildpfad und der Dateiname wurden aus irgendeinem Grund in Kleinbuchstaben umgewandelt, daher rufe ich ToLowerInvariant
für den Pfadnamen auf. Hier ist meine Lösung:
Ich bin mir nicht sicher, wie teuer es ist, ein ResourceSet
zu erstellen. Wenn es teuer ist und Sie mehrere Ressourcen abrufen möchten, sollten Sie das Objekt ResourceSet
zwischenspeichern und erneut verwenden.
Bitte hinterlassen Sie eine Nachricht, wenn Sie wissen, warum die Bilder in der * .g.resources-Datei landen. Hat Visual Studio diesen Namen gewählt? Ist es theoretisch möglich, Bilder direkt in eine Baugruppe zu legen, oder können Baugruppen nur "ResourceSets" enthalten?
Hilft dieser Link? Es zeigt programmatisch das Laden einer Ressource ...