Laden...

Image Resourcen, ich blick überhaupt nicht mehr durch

Erstellt von PoWl vor 12 Jahren Letzter Beitrag vor 12 Jahren 6.129 Views
P
PoWl Themenstarter:in
219 Beiträge seit 2008
vor 12 Jahren
Image Resourcen, ich blick überhaupt nicht mehr durch

Hi,

ich bin mittlerweile völlig verwirrt wir in der WPF und in Visual Studio die Resourcen verwaltet werden.

Ich habe ein Image-Control, möchte da zunächst ein kleines Icon anzeigen, welches ich dann zu bestimmten Ereignissen mittels Code wechseln kann. Ich weiß aber nun nicht wirklich wie und wo ich die Bilder ins Projekt einfügen soll.

Wenn ich die Properties öffne, in den Reiter Resourcen gehe und meine vorhandenen zwei Bilder (sticky1.gif und sticky2.gif) da reinlade dann erscheint im Projektmappenexplorer ein Ordner Resources indem ich diese beiden Dateien finde. In den Properties heißen sie dann sticky1 und sticky2. In den Eigenschaften der Dateien sind diese aber bei der Einstellung "Buildvorgang" nicht als Resource gekennzeichnet. Warum nicht? Find ich völlig unlogisch, das hab ich mal umgestellt. Im XAML-Code kann ich leider nirgendwo eine Definition dieser Resourcen finden. Auch wenn ich in die Eigenschaften des Image-Controls gehe und das Bild aus den Resourcen wählen will bekomm ich hier nichts angezeigt. Geschweigedenn, dass ich das Bild über sticky.Source = (ImageSource)FindResource("sticky2"); ändern könnte (sticky ist der Name des Image-Controls).

Wenn ich ein Bild stattdessen über das Image-Control ins Projekt lade erscheint es im Projektmappenexplorer nicht in einem Resources sondern in einem Image-Ordner. Im Image-Conrol XAML-Code erscheint dann Source="/ToDoToday2.0;component/Images/sticky1.gif". Was ist das denn jetzt?? ("ToDoToday2.0" ist der Projektname)

Auch wo die Resource-Dateien im Projektmappenexplorer überhaupt nicht mehr vorhanden sind so stehen sie in den Properties immernoch drin. Das scheint völlig zusammenhanglos zu sein.

Kann mich da mal jemand aufklären warum es scheinbar 834 verschiedene Wege gibt, ein Bild ins Projekt einzubinden und welcher davon der eine Weg ist, der richtig funktioniert?

lg PoWl

G
538 Beiträge seit 2008
vor 12 Jahren

Ich nutze in WPF genau 2 Wege für Resourcen

  1. die Ressource aus Properties - meistens für Lokalisierung: Zugriff im Code über NamespaceDesProjekts.Properties.Ressources.BildName

  2. Bilder in der Projektmappe, die Ressource als Build-Einstellung haben da kannst du dann aus XAML einfach mit SOURCE=/relativer/Pfad/zum/Bild.jpg zugreifen

Der Pfad den du da bekommst "/ToDoToday2.0;component/Images/sticky1.gif" ist was, was XAML verwendet. Genaueres dazu findest du vermutlich in der MSDN (könnte Ressourcen-Addressierung heißen...)

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

6.862 Beiträge seit 2003
vor 12 Jahren

Hallo,

die Resourcen die in den Projekteinstellungen erstellt werden, sind allgemeine .Net Ressourcen. Mit dem System kann man in WPF nur schwerlich arbeiten. WPF hat ein eigenes Ressourcen System.

Wie Grumbler schon sagt, einfach die Dateien in die Projektmappe tun, Buildaction auf Resource und dann kann man über die URI drauf zugreifen. Zu den Uris unbedingt das hier anschaun (Erklärung der Pack URI Syntax).

Baka wa shinanakya naoranai.

Mein XING Profil.

P
PoWl Themenstarter:in
219 Beiträge seit 2008
vor 12 Jahren

OK, d.h. es ist geschickter einfach die Bilder in die Projektmappe zu schmeißen und sie als Resource (bzw in meinem Fall lieber Eingebettete Resource) einzustellen. Aber wie weise ich dann über den C#-Code meinem Image-Control das andere Bild zu?

G
74 Beiträge seit 2009
vor 12 Jahren

Hallo PoWI,

wenn du es als Resource ins Projekt eingefügt hast und es als "eingebetete Resource" definiert hast musst du nur noch der Anweisung (1) von Grumbler85
folgen.

"NamespaceDesProjekts.Properties.Ressources.BildName"

6.862 Beiträge seit 2003
vor 12 Jahren

Eingebettete Ressourcen (das standard .Net Ressourcensystem) sind in WPF Mist, weil die gar nicht die WPF Typen können. Da bekommt man ne Windows Forms Bitmap zurück wenn man das so wie vorgeschlagen benutzt.

Einfach als Resource als Build Action und dann wie im verlinkten Artikel per URI darauf zugreifen.

Baka wa shinanakya naoranai.

Mein XING Profil.

P
PoWl Themenstarter:in
219 Beiträge seit 2008
vor 12 Jahren

Ahh, die werden aber trotzdem ins Programm mit reinkompiliert? Wozu gibt es dann noch die Option, die Datei ins Ausgabeverzeichnis zu kopieren?

6.862 Beiträge seit 2003
vor 12 Jahren

Hallo,

ja die werden mit reinkompiliert. Das ist doch der Sinn der Resourcen.

Das eine hat mit dem anderen aber nichts zu tun. Bei Referenzen ists ja ähnlich, die kann man auch ausm GAC referenzieren und trotzdem lokal kopieren lassen.

Baka wa shinanakya naoranai.

Mein XING Profil.