首先来看看我的代码:
<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弹出的项目。
答案 0 :(得分:1)
您需要为ListBox定义ItemContainerStyle或ItemsTemplate,并在那里添加ContextMenu。现在,您将进入SelectedValue(DataContext)
您可以为“ContactTemplate”设置Contextmenu,这样当您右键单击ContextMenu时,您将拥有您点击的数据(来自MenuItem.DataContext)
另一种方式,假设您的右键单击可能已将ListBoxItem设置为Selected。在Menu Click事件中,您可以通过((FrameworkElement)sender).DataContext
获取SelectedIndex<MenuItem DataContext="{Binding ElementName=lstBox,Path=SelectedIndex}" ..../>
答案 1 :(得分:1)
试试这个:
private void MenuItem_Click(object sender, RoutedEventArgs e) {
var listItem = (((FrameworkElement)sender)).DataContext; //Cast however you want