在ContextMenu.MenuItem.Click事件处理程序中获取ItemsControl的可视底层ItemTemplate?

时间:2009-09-03 22:56:30

标签: wpf contextmenu itemscontrol menuitem listboxitem

首先来看看我的代码:

<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弹出的项目。

2 个答案:

答案 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