2010-12-20 64 views
0

我有以下上下文菜單:Silverlight上下文菜單:如何確定點擊了哪個菜單?

   <ListBox x:Name="sectionList" Margin="56,8,15,0" FontSize="64" SelectionChanged="SectionList_SelectionChanged"> 
        <ListBox.ItemTemplate> 
         <DataTemplate> 
          <StackPanel> 
           <toolkit:ContextMenuService.ContextMenu> 
            <toolkit:ContextMenu> 
             <toolkit:MenuItem Header="Hide this section from this list" Click="ContextMenuItem_Click" /> 
            </toolkit:ContextMenu> 
           </toolkit:ContextMenuService.ContextMenu> 
           <TextBlock Text="{Binding DisplayName}" /> 
          </StackPanel> 
         </DataTemplate> 
        </ListBox.ItemTemplate> 
       </ListBox> 

正如你所看到的,每個顯示的項目都有自己的上下文菜單。每個上下文菜單掛在同一個事件處理:

private void ContextMenuItem_Click(object sender, RoutedEventArgs e) 
    { 

    } 

從這個方法,我怎麼能告訴單擊的上下文菜單?我想知道對應的DataTemplateDataContext是什麼。

回答

4

您可以通過鑄造發件人爲FrameworkElement獲得訪問DataContext得到一個ListBoxItem綁定到項目:

(sender as FrameworkElement).DataContext 

你可以再投爲適當的模型類和訪問的細節,你需要。例如:

((sender as FrameworkElement).DataContext as ItemViewModel).DisplayName 
1

如果您在事件處理程序ContextMenuItem_Click,內部放置斷點,則您將能夠檢查sendere的屬性。你可能會在那裏找到你的答案。

這樣做的一種方法是將鼠標懸停在這些詞上。另一種方法是使用即時窗口。輸入sender並點上智能感知。

1

如果您使用<StackPanel Tag="{Binding}">((FrameworkElement)sender).Tag將返回DataContext對象(當然,您必須在使用之前將其轉換)。