2009-09-03 5 views
0

Сначала посмотрите на мой код:Получить визуальный базовый элемент ItemTemplate элемента управления ItemsControl в ContextMenu.MenuItem.Click?

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

Я хочу, тем, когда пользователь щелкает правой кнопкой мыши индивидуальный ListBoxItem в ListBox, он должен быть передан (или индекс его или любой другой способ, чтобы найти пункт, что ContextMenu выскочил-на.

ответ

1

Вам нужно определить ItemContainerStyle или ItemsTemplate для ListBox и добавить ContextMenu там. Теперь вы будете находиться внутри SelectedValue (DataContext)

вы можете установить Контекстное для вашего «ContactTemplate», так что, когда вы щелкните правой кнопкой мыши, ContextMenu будет иметь Dat a, на который вы нажали (From MenuItem.DataContext)

Другой способ, который предполагает, что ваш правый клик, возможно, уже установил ListBoxItem как Selected. В меню Click случае вы можете получить SelectedIndex по ((FrameworkElement) отправителя) .DataContext

<MenuItem DataContext="{Binding ElementName=lstBox,Path=SelectedIndex}" ..../> 
1

Попробуйте это:

private void MenuItem_Click(object sender, RoutedEventArgs e) { 

    var listItem = (((FrameworkElement)sender)).DataContext; //Cast however you want 
Смежные вопросы