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
Ich nutze in WPF genau 2 Wege für Resourcen
die Ressource aus Properties - meistens für Lokalisierung: Zugriff im Code über NamespaceDesProjekts.Properties.Ressources.BildName
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)
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.
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?
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"
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.
Ahh, die werden aber trotzdem ins Programm mit reinkompiliert? Wozu gibt es dann noch die Option, die Datei ins Ausgabeverzeichnis zu kopieren?
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.