Stackpanel mit verschiedenen TextBlocks - Geklickte Box ausfindig machen

  • WP8

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Stackpanel mit verschiedenen TextBlocks - Geklickte Box ausfindig machen

    Hallo zusammen,

    ich arbeite mich gerade ein wenig in WPF ein und habe aktuell folgendes Problem.
    Ich möchte gerne ein neues Formular anzeigen, wenn ein jeweiliges "MenuItem" geklickt wird.

    Allerdings wird das Event auch gefeuert, wenn ich einfach so auf die Form klicke, bzw. auf die Panels.
    Ich bin mir sicher, dass es an den RoutedEvents von WPF liegen wird, aber leider weiß ich nicht was ich falsch mache.

    Der betreffliche XAML-Code:

    XML-Quellcode

    1. <StackPanel DockPanel.Dock="Left" MinWidth="130" Background="Red" x:Name="spMenu">
    2. <TextBlock x:Name="mi1" TextAlignment="Center" FontSize="26" PreviewMouseLeftButtonDown="Menuitem_Clicked">MenuItem1</TextBlock>
    3. <TextBlock x:Name="mi2" TextAlignment="Center" FontSize="26" PreviewMouseLeftButtonDown="Menuitem_Clicked">MenuItem2</TextBlock>
    4. <TextBlock x:Name="mi3" TextAlignment="Center" FontSize="26" PreviewMouseLeftButtonDown="Menuitem_Clicked">MenuItem3</TextBlock>
    5. <TextBlock x:Name="mi4" TextAlignment="Center" FontSize="26" PreviewMouseLeftButtonDown="Menuitem_Clicked">MenuItem4</TextBlock>
    6. </StackPanel>


    Der VB.NET Code:

    VB.NET-Quellcode

    1. Private Sub Menuitem_Clicked(sender As Object, e As MouseButtonEventArgs)
    2. If CType(e.OriginalSource, FrameworkElement).Name.Contains("mi") Then
    3. e.Handled = True
    4. MessageBox.Show(CType(sender, TextBlock).Name)
    5. End If
    6. End Sub


    Ich habe schon beabsichtigt eingefügt, dass er überprüfen soll, welche OriginalSource hinter dem ganzen Event steckt. Scheinbar bringt das trotzdem nichts.
    e.handled müsste ich doch theoretisch weglassen können, da dies hier eigentlich die tiefste Ebene des Events ist, sprich danach folgt ja erstmal kein weiteres RoutedEvent, oder?

    Wäre nett wenn jemand helfen könnte.

    PS: Ich habe auch schon mitm Sender versucht zu arbeiten, bzw. mit MouseLeftButtonDown, statt Preview..., allerdings hatte dies ebenfalls zur Folge, dass das Event mehrfach ausgelöst/verarbeitet wurde.
    Vielleicht hatte ich nach verschiedenen Versuchen auch den Überblick verloren und vermischt :/.
    ----------------
    Was mich noch speziell in WPF interessiert, ist mit Datenmodellen besser arbeiten zu können.
    Leider finde ich nicht so die Masse an guten Büchern/Tutorials.

    Wenn jemand also noch Quellen hat, würde ich diese gerne hören/davon lesen :)!

    Meine bisherige Quelle:
    wpftutorial.net

    EDIT:
    Folgendes ist mir noch aufgefallen:
    - Wenn ich Buttons statt TextBlocks verwende geht das Ganze wie gewollt.
    - Es funktioniert bei dem "Bug" nur auf Tablets nicht (2 getestet), auf nem normalen Desktop PC gehts.

    XML-Quellcode

    1. <StackPanel Button.Click="MenuItem_Click" DockPanel.Dock="Left" MinWidth="130" Background="Red" x:Name="spMenu">
    2. <TextBlock x:Name="mi1" TextAlignment="Center" Margin="5,10" FontSize="26" >MenuItem1</TextBlock>
    3. <TextBlock x:Name="mi2" TextAlignment="Center" Margin="5,10" FontSize="26" >MenuItem2</TextBlock>
    4. <TextBlock x:Name="mi3" TextAlignment="Center" Margin="5,10" FontSize="26" >MenuItem3</TextBlock>
    5. <TextBlock x:Name="mi4" TextAlignment="Center" Margin="5,10" FontSize="26" >MenuItem4</TextBlock>
    6. <Button>1</Button>
    7. <Button>2</Button>
    8. <Button>3</Button>
    9. </StackPanel>


    VB.NET-Quellcode

    1. Private Sub MenuItem_Click(sender As Object, e As RoutedEventArgs)
    2. Dim fe = CType(e.Source, FrameworkElement)
    3. MessageBox.Show(fe.Name)
    4. End Sub


    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..

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