C# Bilder, Ressourcen, Objekte - WPF

jojo-kahlua

Lt. Junior Grade
Registriert
Nov. 2012
Beiträge
271
Hallo,
ich mache gerade eine WPF Anwendung.
Jetzt will ich verschiedene Objekte anlegen und denen ein Bild zuweisen. Außerdem will ich von verschiedenen WPF-Fenstern auf diese Objekte zugreifen können. Wie gehe ich hier am besten vor?

Kann man die Objekte beim Start der WPF laden/erzeugen und dann von verschiedenen Ebenen der WPF-Anwendung auf diese Objekte zugreifen?

Außerdem sollen die Objekte kopiert werden können. Dass ich also von jedem Objekt bis zu 5 Kopien anlegen kann.

Viele Grüße
 
Lege dir eine generics.xaml an, die platzierst du irgedwo im Projekt. Diese wird automatisch beim Programmstart geladen.

Darin kannst du dir eine ResourceDictionary mit deinen Objekten anlegen, auf die Bilder kannst du von dort verweisen.

Deinen Pages/UserControls musst du dann nur noch den Verweis auf die generics als Resource mitgeben, fertig.

PS: Sorry für die kurze Antwort, esse gerade. Wenn du mehr Informationen brauchst, dann frag einfach nach :)
 
ResourceDictionary sagt mir noch nichts - aber jetzt habe ich einen Ansatz und kann mich einlesen, denke ich ;)
Danke für den Tipp!


Noch eine andere Frage:
Zum Speichern von Objekten in Dateien ist das Stichwort Serialisierung, richtig?
 
Ja, prinzipiell schon. Da gibts auch fertige Klassen, da musst du keinen eigenen Serializer schreiben.
 
müssen die Bilder dann in der resources.resx erst angelegt werden?


Noch mals Danke
Ergänzung ()

würd mich aber trotzdem auch noch über eine ausführlichere Antwort freuen :)
 
Sorry, bin jetzt noch unterwegs, ich schreib dir ab 22:00 Uhr.
Ergänzung ()

In der Resources.resx musst du gar nix anlegen, die legst du als Objekte in deiner ResourceDictionary ab und gibst ihnen einen Key. Wenn du ein gleiches Bild mit Bindungen ausstatten willst (Alpha-Wert oder so) dann empfiehlt sich ein CustomControl, dieses dann mit den entsprechenden Bindings ausstatten.
 
geht das auch über die App.xaml?
Bzw. was ist da der Untschied zu generics.xaml?
 
Also ich bin kein professioneller WPF-Entwickler, aber nach meinem Wissensstand muss die generic.xaml immer in einem Unterordner 'Themes' in deinem Projekt liegen. Dann wird die Datei immer als Standardort nach Themes durchsucht.

Ob das auch in App.xaml funktioniert weiß ich nicht, bislang habe ich sie immer als "Ersatz" für die Program.cs aus WinForms betrachtet, die den Einstiegspunkt für die Anwendung enthält.

http://stackoverflow.com/questions/1228875/what-is-so-special-about-generic-xaml
 
hmm - irgendwie komm ich nicht weiter:

ich habe eine eigene Klasse "User" mit verschiedenen Attributen. Standardmäßig will ich bereits beim Start der Anwendung ein paar User laden, indem ich ihnen ein Profilbild zuweise und die Attribute festlege.
Wie kann ich das jetzt umsetzen?
Ok von der <ResourceDictionary></ResourceDictionary> haben wir ja schon gesprochen. Aber wie kann ich darin meine eigenen Objektinstanzen anlegen, Bild zuweisen und die Parameter festlegen?

Noch mals Danke für jede Antwort
 
ResourceDictionary hat mit den Usern überhaupt nichts zu tun. Erstelle dir eine User-Verwaltungs-Klasse, die die User speichert, lädt und Ihnen die entsprechenden Attribute zuweist.
 
aber wie kann ich dann die User auf den verschiedenen Oberflächen (xaml - userControl) ansprechen?
Und die sollten ja beim Programmstart erzeugt werden. Und wie mach ich dann die Verbindung eines Users zu einem xaml-Image?

Sorry, aber ich glaube, irgendwie steh ich gerade auf der Leitung^^
 
Wie willst du die User(-Objekte) denn "ansprechen". Normalerweise würde man ein User-Objekt an ein Xaml-Control binden (bzw. dessen Properties).
 
Ja das ist eben, wo ich hänge..
Ich dachte man könnte von meiner Klasse User einfach Objekte erzeugen, denen ein Bild zuordnen (von mir aus als Attribut) und alle User beim Programmstart laden. Und zugleich global, so dass ich auf den einzelnen WPF-Seiten die User ansprechen kann.

Du sagst also, dass ich ein Xaml-Control für jeden User erstellen sollte und die Attribute meiner User-Klasse an diese binde. Kann ich diese Controls dann standarmäßig beim Start alle auf einmal laden und wie kann ich dann je nach Bedarf auf den einzelnen WPF-Seiten diese Controls aufrufen?
 
Ich verstehe immer noch nicht ganz, was du eigentlich machen möchtest. Klar kannst du von deiner User-Klasse Objekte erstellen und alle User beim Start laden und global verfügbar machen. Wie soll das Layout deines Programms denn aussehen? Willst du eine Liste der User anzeigen? Dann erstell' ein ItemTemplate, dass das Bild und Name des Users anzeigt und binde deine User-Objekte an die Liste. Selbst Controls laden musst du nicht.
 
also - die User haben verschiedene Eigenschaften (z.B. Name, Wohnort, Nationalität, Holz, Eisen, Gold). Jeder User soll letztendlich über ein Bild (Profilbild) ansprechbar sein.

Auf einer WPF-Seite sollen dann z.B. alle User angezeigt werden (z.B. Ranking). Auf einer anderen Seite sollen nur bestimmte User, bzw. deren Bild, angezeigt werden (z.B. mit denen man Handeln darf), wieder auf einer anderen Seite des Profil des eingeloggten Users, wo auch das Bild des Users ausgetauscht werden kann. Lauter so Sachen eben.
Ich dachte einfach da wäre es am geschicktesten, wenn man alle Bilder vorab irgendwie laden kann. Es soll auch fest vorgegebene User geben, die standardmäßig immer "mitspielen" sollen und entsprechend auch irgendwie initialisiert und auf den verschiedenen Seiten angesprochen werden sollten.

Ich hoffe, das war etwas verständlicher formuliert?
 
Bis auf das Profil sind das alles nur Listen. Nur die darin enthaltenen User sind unterschiedlich.

Theoretisch kannst du das Bild einmalig in ein User-Objekt laden (z.B. als Bitmap) und dieses Objekt in allen Listen verwenden (für User X existiert also nur ein Objekt im ganzen Programm). Problematisch dürfte die Darstellung des Bildes sein, denn afaik kann ein Bitmap nur in einem Control gleichzeitig angezeigt werden. Die Details müsste man dazu noch googlen. Du wirst das Bild für die Anzeige wahrscheinlich immer kopieren müssen.
 
Also wenn das ein privates Projekt ist, dann kann ich auch dir paar Sachen zeigen. Würde in die Richtung gehen, wie man Software entwickelt, dass die Zuständigkeiten getrennt sind, es gut wartbar ist, verständlich aufgebaut und erweiterbar ist. Hast du eine Art Lasten/Pflichtenheft oder Konzept für das Programm?
 
ja, ist ein privates Projekt. Ich habe kein direktes Lasten/Pflichtenheft, sondern hab mir per Hand einige Notizen gemacht (mit denen wohl nur ich selber mich zurecht finde^^). Für solche "Spielereien" habe ich leider auch nur begrenzt in meiner Freizeit Zeit. Aber es macht mir halt einfach Spaß :)
Bzgl. Wartbarkeit, was ja den Aufbau und die Erweiterbarkeit miteinschließt, habe ich ganz gute Einblicke auf einer C#-Schulung bekommen. Die erworbenen Kenntnisse will ich jetzt einfach vertiefen und erweitern - daher so ein "kleines, einfaches" Projekt.

Wo ich immer noch hänge: Bild einmalig in User-Objekt laden - ok. Aber wo erzeuge ich die ganzen User-Objekte am besten, um diese übergreifend auf den verschiedenen WPF-Seiten ansprechen zu können?


Danke noch mal an all die Hilfestellungen!
 
Du brauchst eine User-Verwaltung, die sich global ansprechen lässt, Stichwort static, Singleton-Pattern. Diese initialisierst du dann beim Starten deines Programms, damit diese alle User laden kann.
 
Zurück
Oben