Custom ComboBox mit Bildern

  • WPF

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    Custom ComboBox mit Bildern

    (Bitte unbedingt komplett durchlesen, sonst kommt meine Frage nicht richtig an)

    Guten Tag,

    Ich möchte eine eigene ComboBox erstellen. Die einzige Voraussetzung ist, dass ich sie komplett mit eigenen Bildern designen kann. Ich werde hier alles zur Verfügung stellen, was helfen könnte um es nachzustellen. Hoffentlich könnt ihr mir da behilflich sein. Leider hat die normale ComboBox keine Eigenschaften wie IsDefaulted, IsPressed oder IsMouseOver, daher muss ich wohl ein eigenes UserControl schreiben (was ich in Ordnung finde).

    Meine ComboBox besteht aus exakt vier Teilen. Und zwar sind dies die folgenden:

    Der Button selbst:


    Ein Eintrag:


    Jeder zweite Eintrag:


    Das Ende:


    Und hier ist ein Beispiel dafür, wie es aussehen wird:


    Wie ihr sehen könnt, kann ich mit diesen 4 Bildern bereits eine unendlich lange ComboBox erstellen. Ich weiß, dass ich dies auch ohne Bildern hinkriege, aber das war nur ein Beispiel. Später kommen komplexere Bilder ins Programm. Meine Theorie ging nun wie folgt (nur bin ich mir einfach nicht sicher, ob dies Performance-bedingt überhaupt die beste Methode ist): Ich erstelle ein UserControl in dem ich diese vier Bilder mit dem bereits vorhandenen Image Control darstelle. Die Einträge werden in einer Liste gespeichert, welche ich mit .ItemSource dann auf die Einträge übertragen kann. Wie ich anfangen soll? Ich weiß es nicht.

    Mein Ansatz ist wie folgt:

    C#-Quellcode

    1. ​public partial class DesignableComboBox: UserControl
    2. {
    3. public partial class DesignableComboBox : UserControl
    4. {
    5. List<string> comboBoxItems = new List<string>();
    6. public DesignableComboBox()
    7. {
    8. InitializeComponent();
    9. }
    10. }


    Und ab hier bin ich noch nicht weiter gekommen. Ist es eine gute Idee, die Image Controls im Code-Behind zu initialisieren? Tut man das in WPF überhaupt noch? Hoffentlich hatte mal jemand das Problem. Ich würde übrigens eine viel einfachere Methode über alles oben genannte bevorzugen.
    Hallo

    Erstmal. Verstanden habe ich deinen Text, auch was du vor hast. (Denke ich)
    Ich denke aber auch das du hierfür kein UserControl oder gar ein eigenes Control erstellen musst.
    Ich denke das (und das ist ja die stärke der WPF) alles rein mit einem ControlTemplate realisiert werden kann.

    CensoredAlpaca schrieb:

    Ist es eine gute Idee, die Image Controls im Code-Behind zu initialisieren? Tut man das in WPF überhaupt noch?

    Eben nicht. In der Welt der WPF eher eine schlechte Idee.

    Um auf nimmer sicher gehen zu können müsste man wissen wie die Combobox am ende aussehen soll.

    Kannst du ein Beispielbild erstellen wie die Combobox zum schluss mit vieleicht ein paar Einträgen aussehen soll. Dann kann man sehen ob man hierfür ein Template erstellen kann.
    Das wäre nämlich die sauberste lösung.

    Bez. deinen "Effekten" wie IsDefaulted, IsPressed oder IsMouseOver wäre auch ein Beispiel gut was passieren soll. Denn auch Animations und der gleichen sind in der WPF realisierbar, und da bist du dann nämlich auch performancetechnisch save.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    @Nofear23m Leider ist exakt hier der haken. Die ComboBox muss Bilder als Effekte nutzen, diese kann man nicht per WPF erstellen. Mein Beispiel war nur ein Beispiel, diese Bilder werden in Zukunft für verschiedene Kunden ausgetauscht und diese bestehen teilweise aus sehr professionellen Designs welche in Photoshop erstellt werden (diese Designs sind sehr nicht selten sehr detailreich gestaltet).

    Hier ist ein Beispiel, was ich schnell zusammengekleistert habe um zu erklären, wie es aussehen könnte (ein sehr übertriebenes Beispiel):
    Hi. @CensoredAlpaca

    Das was Du im Bild dargestellt hast ist eine Rahendekoration, und sollte ausserhalb der Combobox sein.
    Dazu kombiniert man/frau/divers/KI Controls zu einem UserControl und stellt mittles DependencyProperty(s)
    werden dann die "Formatierungen" und "Gestaltungsquellen" bereitgestellt.

    Dazu werden DataTemplates, ControlTemplates und ItemTemplates, je nach Anwendungsfall eingesetzt.

    Wenn Photoshop verwendet wird kommen also Bitmaps zum Einsatz und somit werden ImageSources und ImageControls genutzt.

    Zur manipulation von Bild-/Rahmen-dimensionen werden abermals DependencyProperty(s) evtl. AttachedProperty(s) eingesetzt.

    Es gibt die Möglichkeit der zeilenweise Einfärbung der Listeneinträge in XAML, und ist mit "Style.Triggers" umzusetzen.

    Rahmen um die einzelnen Einträge sind in der ItemTemplate festzulegen.

    Dort kann auch ein Bild per Eintrag festgelegt werden. Muss mittels DataTemplate umgesetzt werden.

    Der Rahmen ist um die ComboBox und nicht um die "aufgeklappten" Einträge?

    Ich rede vom Schi-Schi am oberen Rand. WoW lässt grüssen.

    Anmerkung: Mir fällt auf, ich habe niemals nicht WoW gespielt. Mhhh... Muss ich mal nahholen... Und Joshi ward nicht mehr gesehen. 8|

    Ich hoffe ich konnte einige Begriffe in das Forum werfen, nachdenen gesucht und geforscht werden kann.

    All diese Themen sind hier im Forum abgehandelt, und sind zum Ernten reif.

    c.u. Joshi der mit der ListBox tanzt, nicht der Joshi aus Wanne-Eickel der tantz nur mit der ComboBox. Wichtig! :whistling: :?: :/ 8o ?(
    Hallo

    Also ich hab ja die "Originalen" Bilddateien nicht aber ich habe dennoch schnell mal was zusammengeschustert.
    Jetzt einfach mal so als Combobox in ein Window.
    Das kann man nun hübsch und passend machen und auch wenn man will Dynamisch so das man die Bilder auch an Properties übergeben kann.
    Hierfür würde ich ein CustomControl erstellen welches von Combobox ableitet oder zumindest ein Usercontrol und diesem ein paar DependencyProperties verpassen welchen ich dann die Bilddateinamen bzw. die Pfade übergeben kann.

    Hier mein schnelles Ergebnis:


    und hier das Testprojekt: ImagesComboboxTest.zip

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##