2009-09-03 24 views
0

先看看我的代碼:在ContextMenu.MenuItem.Click事件處理程序中獲取ItemsControl的可視底層ItemTemplate?

<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的,應通過(或它的索引或任何辦法找到該文本菜單彈出出的項目。

回答

1

您需要定義ItemContainerStyle或ItemsTemplate爲ListBox,並添加文本菜單那裏。現在,你將是的SelectedValue(DataContext的)內部

您可以設置文本菜單爲您'ContactTemplate',這樣當你右鍵點擊你的ContextMenu時會有Dat您從其上點擊(從MenuItem.DataContext)

另一種方法,它假定您的右鍵可能已經將該ListBoxItem設置爲Selected。在菜單中點擊事件即可獲得((FrameworkElement的)發送方)將selectedIndex .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 
相關問題