Elemente zur Laufzeit verschieben

  • WPF

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

    Elemente zur Laufzeit verschieben

    Hallo Zusammen,

    ich habe ein Element in einem Canvas und möchte dieses zur Laufzeit verschieben.

    Ich habe es sowohl mit der Margin Eigenschaft als auch mit der Canvas Eigenschaft versucht.

    Beim ersten mal vklappt das super, beim zweiten mal verschiebt es sich nicht mehr sondern bleibt an der ersten position.

    Hier die Xaml des Grid:

    XML-Quellcode

    1. <Grid Margin="{Binding ManMoveBoxMargin}">


    und hier der Code im Adapter:

    VB.NET-Quellcode

    1. Private Sub GetBtnName(sender As Object)
    2. Dim TempBtn As System.Windows.Controls.Button = (DirectCast(sender, System.Windows.Controls.Button))
    3. Dim BtnPos As Point
    4. BtnPos = TempBtn.PointToScreen(New Point(0, 0))
    5. If LastManBtn = TempBtn.Name Then
    6. ApplicationService.SetView("ManMoveRegion", "EmptyView")
    7. ManMoveBoxMargin = New Thickness(0)
    8. LastManBtn = ""
    9. Else
    10. ApplicationService.SetView("ManMoveRegion", "ManMoveBox")
    11. ManMoveBoxMargin = New Thickness(BtnPos.X, BtnPos.Y, 0, 0)
    12. LastManBtn = TempBtn.Name
    13. End If
    14. MessageBox.Show(TempBtn.Name & " Margin: " & ManMoveBoxMargin.ToString)
    15. End Sub


    Wird die Margin bzw Canvas eigenschaft nur beim ersten laden der View übernommen?

    Grüße Jaymo
    in wpf würde man sowas auch über ein Viewmodel abwickeln.
    Ich fürchte nur, der Begriff "MVVM"-Pattern sagt dir garnichts.
    Da wäre notwendig, dass du dich damit mal ausgiebig beschäftigst.

    Zum Beweis, dass sowas möglich ist, kannste dir dieses Tut reintun: Kein Pong - Erstaunliches mit ItemsControl.Itemspanel

    Aber wie gesagt: Ohne die entsprechenden Grundlagen fürchte ich, das ist zu anspruchsvoll.
    Zum Glück gibts im wpf-Tut bereich auch so einige Grundlagen-Tuts zu Wpf und MVVM.
    Hallo

    Jaymo schrieb:

    Beim ersten mal vklappt das super, beim zweiten mal verschiebt es sich nicht mehr sondern bleibt an der ersten position.

    Das stellen sich zwei fragen. Zum einen: Läuft er auch beide mal brav in den Else Zweig.
    Und zum zweiten:

    Jaymo schrieb:

    ManMoveBoxMargin = New Thickness(BtnPos.X, BtnPos.Y, 0, 0)

    Sind in BtnPos.X bzw. BtnPos.Y auch immer andere Wert drinnen. Sind beim zweiten mal die selben werte enthalten wie beim ersten mal ist ja klar das sich nichts tut.

    Trotzdem, in deinem letzten Thread haben wir dich darauf hingewiesen das es in WPF unklug ist Control direkt anzusprechen. WPF arbeitet mittels Binding viel besser.
    Anfängern rate ich von MVVM ab, da am Anfang nicht notwendig, man kann super Applikationen bauen ohne MVVM und die CodeBehind (ist ja auch eine Klasse) super für Binding verwenden.
    Aber.... es muss über Binding gearbeitet werden.

    Definiere in der CodeBehind Properties welche im Seter INotifiPropertyChanged werfen.
    Binde dein Window im Window_Loaded mit Me.DataContext = Me auf sich selbst und steure dann alles mittels Binding auf diese Properties und du wirst sehen das alles viel besser "flutscht".
    Für fragen stehen wir gerne zur verfügung, bei Beratungsresistenz werden hier die meissten aber vermutlich nicht mehr viel dazu sagen.

    Schöne 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. ##

    Hallo zusammen,

    merke schon das mir noch einiges fehlt.

    Mir wurde nur empfohlen mit MVVM zu arbeiten da es sich nicht gehören würde bei WPF mit Codebehind zu arbeiten.

    Ich werde mir mal die Tutorials zu gemüte führen.

    Könnt ihr mir da eines empfehlen?

    Danke euch erstmal für die Hilfe.

    Grüße Jaymo

    Jaymo schrieb:

    Mir wurde nur empfohlen mit MVVM zu arbeiten da es sich nicht gehören würde bei WPF mit Codebehind zu arbeiten.

    das empfehle ich ja auch, nur ist es am Anfang mehr als schwer sich da zurecht zu finden.
    Im Moment machst da ja alles im WinForm-Stil.

    Guckst du meine Signatur.

    Ein soweit vollständiges MVVM Beispiel findest du hier.
    Es ist zwar das EntityFramework mit drinnen, aber das denke dir einfach mal weg.

    Weiters ist zu sagen das MVVM "nur" ein Pattern ist. Es gibt sehr viele unterschiedliche Wege dieses zu implementieren. Die einen mehr, die anderen weniger gut.
    Fakt ist, viele Beispiele im Netz sind schlichtweg falsch da sie oft die View mit "hereinholen".

    Musst du selbst entscheiden.

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