Reagieren auf Rechtsklick in einer ListBox

  • WPF MVVM
  • .NET (FX) 4.5–4.8

    Reagieren auf Rechtsklick in einer ListBox

    Hallo miteinander :)

    Ich habe folgende Definition einer ListBox im XAML:

    Spoiler anzeigen

    XML-Quellcode

    1. <ListBox Name="lstMusiktitel" SelectionMode="Single" ItemsSource="{Binding AnzuzeigendeMusiktitel}" SelectedIndex="{Binding MarkierterMusiktitel, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
    2. <ListBox.ItemTemplate>
    3. <DataTemplate>
    4. <Grid>
    5. <Grid.ColumnDefinitions>
    6. <ColumnDefinition Width="3*"/>
    7. <ColumnDefinition Width="3*"/>
    8. <ColumnDefinition Width="94*"/>
    9. </Grid.ColumnDefinitions>
    10. <TextBlock Text="{Binding Path=Musiktitel}" Grid.Column="2" TextTrimming="CharacterEllipsis">
    11. <ToolTipService.ToolTip>
    12. <StackPanel>
    13. <TextBlock Text="{Binding Path=Tracknummer}"/>
    14. <TextBlock Text="{Binding Path=Interpret}"/>
    15. <TextBlock Text="{Binding Path=Album}"/>
    16. <TextBlock Text="{Binding Path=Musiktitel}"/>
    17. <TextBlock Text="{Binding Path=Dauer}"/>
    18. <TextBlock Text="{Binding Path=Genre}"/>
    19. </StackPanel>
    20. </ToolTipService.ToolTip>
    21. </TextBlock>
    22. <Border Name="brdMusiktitelZuPlaylistZufuegen" Height="{StaticResource listboxitemhoehe}" Grid.Column="0" Style="{DynamicResource Navigationsbuttons}" ToolTip="Füge diesen Musiktitel der Playlist des gewählten Plattendecks zu..." HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
    23. <Border.InputBindings>
    24. <MouseBinding MouseAction="LeftClick" Command="{Binding DataContext.MusiktitelZuPlaylistZufuegen, ElementName=lstMusiktitel}" CommandParameter="{Binding}"/>
    25. </Border.InputBindings>
    26. <Viewbox Stretch="Uniform">
    27. <Path Margin="4" Stretch="Uniform" Fill="{DynamicResource VordergrundfarbeBrush}" Data="xxx"/>
    28. </Viewbox>
    29. </Border>
    30. <Border Name="brdMusiktitelAbspielen" Height="{StaticResource listboxitemhoehe}" Grid.Column="1" Style="{DynamicResource Navigationsbuttons}" ToolTip="Spiele diesen Musiktitel auf dem gewählten Plattendeck ab...">
    31. <Border.InputBindings>
    32. <MouseBinding MouseAction="LeftClick" Command="{Binding DataContext.MusiktitelAbspielen, ElementName=lstMusiktitel}" CommandParameter="{Binding}"/>
    33. </Border.InputBindings>
    34. <Viewbox Stretch="Uniform">
    35. <Path Margin="4" Stretch="Uniform" Fill="{DynamicResource VordergrundfarbeBrush}" Data="xxx"/>
    36. </Viewbox>
    37. </Border>
    38. </Grid>
    39. </DataTemplate>
    40. </ListBox.ItemTemplate>
    41. </ListBox>


    Nun will ich auf Rechtsklick ein Popup öffnen. Wenn ich das mache:

    XML-Quellcode

    1. <ListBox Name=[...]>
    2. <ListBox.InputBindings>
    3. <MouseBinding MouseAction="RightClick" Command="{Binding ZeigeMusiktitelPopUp}"/>
    4. </LisBox.InputBindings>
    [...]

    ...passiert auf Rechtsklick nichts. Klar, weil ja "über" der ListBox dann noch das Zeugs aus dem ItemTemplate liegt, also der TextBlock und die zwei Borders mit den Paths drinnen.

    Wenn ich das InputBinding aber nicht in der ListBox anwende, sondern z.B. auf den Textblock, passiert komischerweise auch nichts...:

    XML-Quellcode

    1. <ListBox Name=[...]>
    2. <TextBlock.InputBindings>
    3. <MouseBinding MouseAction="RightClick" Command="{Binding ZeigeMusiktitelPopUp}"/>
    4. </TextBlock.InputBindings>
    [...]

    Hat mir da jemand einen Lösungsvorschlag?

    Edit:
    Alternative wäre ein Kontextmenü. Aber weiss jemand vielleicht warum des Kontextmenü hier nicht mittig auf der ListBox erscheint?:

    XML-Quellcode

    1. <ListBox Name="lstMusiktitel" SelectionMode="Single" ItemsSource="{Binding AnzuzeigendeMusiktitel}" SelectedIndex="{Binding MarkierterMusiktitel, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ContextMenuService.Placement="Center" ContextMenuService.PlacementTarget="{Binding ElementName=lstMusiktitel}">
    2. <ListBox.ItemContainerStyle>
    3. <Style TargetType="{x:Type ListBoxItem}">
    4. <Setter Property="ContextMenu">
    5. <Setter.Value>
    6. <ContextMenu Opacity="0.5">
    7. <ContextMenu.Template>
    8. <ControlTemplate>
    9. <Button>johohlo</Button>
    10. </ControlTemplate>
    11. </ContextMenu.Template>
    12. </ContextMenu>
    13. </Setter.Value>
    14. </Setter>
    15. </Style>
    16. </ListBox.ItemContainerStyle>


    und auch das hier funktioniert komischerweise nicht:

    XML-Quellcode

    1. <ContextMenu PlacementTarget="{Binding ElementName=lstMusiktitel}" Placement="Center">

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „kafffee“ ()