0

我不明白为什么在使用 MVVM 时无法检测到右键单击列表框。我使用事件触发器,但有些事件不起作用。

<ListBox x:Name="PlaylistsList" ItemsSource="{Binding PlaylistsList}" HorizontalAlignment="Left">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseRightButtonDown">
                <i:InvokeCommandAction Command="{Binding NewPlaylistCommand}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
</ListBox>

我的命令“NewPlaylistCommand”永远不会被调用。你可以帮帮我吗 ?谢谢你。

编辑:我找到了解决问题的方法,我使用 ContextMenu 与我的 ListBoxItem 交互

<ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel x:Name="ListBox">
                    <TextBlock Text="{Binding Name}"/>
                    <StackPanel.ContextMenu>
                        <ContextMenu>
                            <MenuItem Header="Rename" Command="{Binding RenamePlaylistCommand}"/>
                            <MenuItem Header="Delete" Command="{Binding DeletePlaylistCommand}" CommandParameter="{Binding SelectedValue, ElementName=PlaylistsList}"/>
                        </ContextMenu>
                    </StackPanel.ContextMenu>
                </StackPanel>
            </DataTemplate>
</ListBox.ItemTemplate>

现在我可以右键单击我的项目以重命名或删除它。谢谢您的帮助。

4

1 回答 1

0

很可能里面的东西吞下了你的右键单击事件,因此它没有冒泡(我怀疑它与上下文菜单行为有关)。您可以使用以另一种方式冒泡的 Preview- 事件。

您可以使用的另一个解决方案是将交互直接应用于列表框中的每个孩子(以及他们的孩子)。

但是,老实说,从 UI 的角度来看,我并不期望右键单击播放列表会创建一个新的播放列表......我希望从我多年的 Windows 使用情况来看,应该会弹出一个上下文菜单,可能带有“添加新播放列表”菜单项。

于 2013-04-01T16:57:11.917 回答