Tag des ContextMenu Binding zum Tag des Übergeordnetem Button

  • WPF

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

    Tag des ContextMenu Binding zum Tag des Übergeordnetem Button

    Tach auch,

    Bin relativ neu bei WPF dabei. Beim Binding bin ich noch wackelig..

    Ich habe in meiner Dynamischen Resource ein ContextMenu. Dieses wird einem Statischen Resource Button als Content übergeben.
    Ich möchte das der "Tag" des ContextMenus den "Tag" des Buttons erbt. (Nicht die untergeordneten MenuItems)

    Müsste ja hier hinein:

    Quellcode

    1. <ContextMenu x:Key="BtContext" Tag="???"


    Wie bekomme ich das hin?
    Wäre nett wenn einer helfen könnte....

    mfg
    Olli

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „olliza“ ()

    Hallo Olli

    Wenn der Button einen Name hat kannst du ganz Simple ein Binding auf das Objekt und damit dann auf den Tag setzen.
    ​{Binding myButton.Tag}

    Aber wenn man den ​Tag benötigt und sich so verbiegen muss bin ich der Meinung das du Grundlegend hier einen Fehler hast und das Konzept evtl. nicht richtig anwendest.
    Schau dir mal meine Signatur an, Binding ist sooo genial wenn man es richtig anwendet, wäre schade wenn du "falsch" anfängst und dann die Lust an der WPF verlierst.

    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. ##

    olliza schrieb:

    Leider bleibt mein Problem

    Vermutlich weil...

    olliza schrieb:

    Meine Buttons werden während der Laufzeit dynamisch erstellt.

    Da kommt es darauf an wie. In der WPF hat man hier ganz andere möglichkeiten sowas zu bewerkstelligen, und das ist genau das was ich mit meinem ersten Post meinte.

    Hol doch mal etwas mehr aus und schreib was genau du denn machen willst, ich gehe davon aus das es hier bessere Möglichkeiten gibt.

    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. ##

    Erst mal vorweg: Die Anwendung simuliert eine Magnet-Schiebetafel zur Personalplanung auf die Arbeitsplätze.
    Sie stellt also eine Oberfläche dar.
    Auf der Oberfläche werden Buttons oder Labels erstellt.
    Buttons, Labels oder (in meinem Fall) Canvas haben unterschiedliche ContextMenus
    Je nach Zustand des Buttons (Anwesender MA oder Abwesender MA) habe ich im ContextMenu mehr oder weniger Auswahl.
    In meiner vorigen Winforms Version hatte ich dies durch einen veränderten Tag erreicht.

    In meinem "MainWindow" habe ich in der WindowResources ein ContextMenu erstellt.

    Erstellen tu ich meinen Button im CodeBehind:

    VB.NET-Quellcode

    1. Private Sub BtErstellen()
    2. AnzBt += 1
    3. Dim mousePoint As New Point(Mouse.GetPosition(MyCanvas).X - (Mouse.GetPosition(MyCanvas).X Mod 5), Mouse.GetPosition(MyCanvas).Y - (Mouse.GetPosition(MyCanvas).Y Mod 5))
    4. Dim p As New Button With {.Margin = New Thickness(mousePoint.X, mousePoint.Y, 0, 0), .Style = FindResource("MaBt"), .ContextMenu = FindResource("BtContext"), .Content = "Mitarbeiter" & AnzBt}
    5. MyCanvas.Children.Add(p)
    6. AddHandler p.PreviewMouseDown, AddressOf BtPreviewMouseDown
    7. AddHandler p.PreviewMouseMove, AddressOf Bt_PreviewMouseMove
    8. End Sub
    Hallo

    Sowas geht relativ gut per Binding abbildbar. Wie ich sehe arbeitest du aber nicht mit Binding sondern mit CodeBehind. Dafür ist die WPF aber nicht konzipiert wie du merkst. WPF ist nicht WinForms.

    Schau dir meine Tutorialreihe an und versuch das per Binding und Klassen abzubilden, dein Vorhaben ist ein gutes Beispiel wie schön man per Binding arbeiten kann.
    Hast du eine fertige WinForms die das zeigt oder Screenshots? Würde mich interessieren.

    Wie gesagt, schau mal in meine Signatur.
    Und wenn du Fragen hast frag ruig.

    Grüße
    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. ##

    olliza schrieb:

    Die Anwendung simuliert eine Magnet-Schiebetafel zur Personalplanung auf die Arbeitsplätze.
    Sie stellt also eine Oberfläche dar.
    Auf der Oberfläche werden Buttons oder Labels erstellt.

    Etwas in Teilen ähnliches habe ich hier erstellt: Kein Pong - Erstaunliches mit ItemsControl.Itemspanel
    Auch hier werden dynamisch Buttons erstellt, die auf einem Canvas positioniert werden.
    Allerdings macht die Anwendung dann was ganz anderes: Die Buttons haben das Aussehen von Bällen und sausen im Canvas herum - aber wie gesagt:
    Frei positionierbare Buttons werden aus einem Viewmodel generiert.

    Das wird ein schwieriger, aber gleichzeitig auch sehr guter Einstieg für dich, weil es zeigt, wie extrem unterschiedlich der MVVM-Pattern von deiner bisherigen Denkweise ist.



    Ein anderes Thema ist, ob eine Magnet-Schiebetafel-Simulation wirklich das beste Instrument zur Arbeitsplanung ist.
    Ich würde bei dem Thema eher an ein Gant-Diagramm denken, oder gar an eine Kreuztabelle.
    Auch sowas ist in Wpf machbar, und wieder muss man komplett umdenken.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Danke für Eure Anregungen Hilfe und Tips !!! :thumbup:
    Un das meine ich wirklich ehrlich !!!

    Meine WinForms Anwendung befindet sich ja bereits in der Anwendung. (Und wird sehr gut angenommen :D )
    Man darf nicht vergessen, ich bin kein Programmierer und komme auch nicht aus der IT !
    Die meiste Logik und Syntax musste ich mir nebenbei selber erlernen.
    Ich arbeitete nur als kleiner "Werker".. Aber genug Mimi Mimi...

    Ich wollte dieses WPF Projekt nur für mich erstellen, und bin gewaltig am Anfang, daher noch der CodeBehind.
    Ich komme meistens nur weiter mit Trial'nError, welches aber ok ist für mich.

    Aber bei dieser 'harten Nuß' komme ich einfach nicht mehr weiter.
    Wie binde ich nur den Tag vom ContextMenu an seinen Parent (Button) Tag. Ganz oben wäre ja nur das PopUp
    und über den ElementName kann ich nicht, da ja dynamisch erstellt

    Das ContextMenu wir nämlich getriggert falls sich der Tag ändert, so meine Logik.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „olliza“ ()

    Hallo

    Ist ja alles kein Thema, und lernen ist ja immer gut.
    Wenn du dein Projekt nun auf WPF umbauen willst solltest du aber eben richtig Anfangen damit es auf lange Sicht auch spaß macht.
    Du machst es ja eben für dich und dann soll es ja auch spaß machen.

    Wenn du dein Programm welches du unter WinForms bereits hast hier zeigst. Zumindest nen Screenshot damit ich mir was vorstellen kann, kann ich dir gerne ein paar Vorschläge machen, denn die WPF funktioniert eben anders und verwendet man die WPF falsch macht es eben keinen spaß.

    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. ##

    Anbei mal 4 Screenshots.
    Die Mitarbeiter (Buttons) können verschoben werden, und rasten an den Arbeitsplatz (Label) ein.
    Die freistehenden Mitarbeiter sind als abwesend zu verstehen.
    Die ganze Gruppe, oder einzelne Arbeitsplätze können natürlich auch verschoben werden.
    Ist halt wie eine Magnet-Schiebe Tafel. Die Zähler sind nur ein BonBon oben drauf.

    Zu den Bildern: Ich habe mal willkürlich 3 Gruppen mit Mitarbeitern ganz fix erstellt.
    Zugegeben, alles dicht-gekleistert mit ContextMenus (rechtsklick auf Gruppe Arbeitsplatz oder Mitarbieter), ist aber sehr intuitiv zu bedienen.
    Wenn man bedenkt das es in Abteilungen bis zu 5 Gruppen gibt mit mehr als 40 Mitarbeitern, war z.t. das Papierhandling doch sehr archaisch.
    Eine IT-Lösung ist zwar in Arbeit, aber als Not-Behelf ist meins doch gut zu gebrauchen.


    Freistehenden Mitarbeitern habe ich einen Wert im Tag gesetzt, falls der gesetzt ist entfallen einige MenuItems, daher mein Eingangs Post.
    Ich möchte das auch so beibehalten !!!! Schon alleine deswegen, um es zu verstehen, und wegen der Herausforderung.

    Ich möchte diese Winforms Vorlage nicht 1:1 in WPF umsetzen ! Vielleicht werde ich die WPF auch nie wirklich erlernen können mit meinem intellekt.
    Für mich war das erstellen der Anwendung eh schon schwierig genug. Aber es läuft fehlerfrei.
    Und wenn ein IT'ler in meinen Code schauen würde, würde der bestimmt die Hände über den Kopf schlagen,aber ich verneige mich vor allen, weil ich weiß was ihr zu leisten vermögt.
    Bilder
    • Sc1.jpg

      78,23 kB, 1.080×608, 42 mal angesehen
    • Sc2.jpg

      83,67 kB, 1.080×524, 38 mal angesehen
    • Sc3.jpg

      86,7 kB, 1.080×608, 42 mal angesehen
    • Sc4.jpg

      81,94 kB, 1.080×608, 37 mal angesehen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „olliza“ ()

    Verstehe

    So kompliziert ist das garnicht umzusetzen.
    Nur musst du wenn du das wirklich als WPF Anwendung umsetzen willst einfach umdenken.
    Falls du das willst können wir dir gerne unter die Arme greifen, dennoch musst du dich umstellen.

    In der Welt der WPF kommt man nicht drumrum mit Klassen zu arbeiten. Du bildest also die Welt in Klassen ab. Klingt komplizierter als es ist, man muss aber ein gewisses Grundwissen über Klassen, vererbung und Interfaces haben.

    Wie gesagt, gerne unterstützen wir dich, du musst nur sagen ob du das auch wirklich angehen willst.

    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. ##