0

首先看一下我的代码:

<ListBox ItemsSource="{Binding}" SelectionMode="Multiple"
    ItemTemplate="{StaticResource ContactTemplate}">
    <ListBox.ContextMenu>
        <ContextMenu>
            <MenuItem Name="mnuEdit" Header="_Edit" Click="MenuItem_Click" />
        </ContextMenu>
    </ListBox.ContextMenu> 
</ListBox>

我想要,当用户右键单击 ListBox 中的单个 ListBoxItem 时,它应该被传递(或它的索引或任何查找 ContextMenu 弹出的项目的方法。

4

2 回答 2

1

您需要为 ListBox 定义 ItemContainerStyle 或 ItemsTemplate 并在那里添加 ContextMenu。现在您将在 SelectedValue(DataContext) 内

您可以为您的“ContactTemplate”设置上下文菜单,这样当您右键单击时,您的 ContextMenu 将拥有您单击的数据(来自 MenuItem.DataContext)

另一种方式,假设您的右键单击可能已经将该 ListBoxItem 设置为 Selected。在 Menu Click 事件中,您可以通过 ((FrameworkElement)sender).DataContext 获取 SelectedIndex

<MenuItem DataContext="{Binding ElementName=lstBox,Path=SelectedIndex}" ..../> 
于 2009-09-04T04:33:39.947 回答
1

试试这个:

private void MenuItem_Click(object sender, RoutedEventArgs e) {

  var listItem = (((FrameworkElement)sender)).DataContext;  //Cast however you want
于 2010-11-14T03:35:22.273 回答