2010-12-20 15 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) 
    { 

    } 

この方法から、どのコンテキストメニューがクリックされたかをどのように知ることができますか?私はDataTemplateのためにDataContextが何であるか知りたいです。

答えて

4

あなたはListBoxItemがDataContextへのアクセスを得るためにFrameworkElementとして送信者をキャストしてにバインドされているアイテムを取得することができます:あなたは、適切なモデルクラスにこれをキャストし、詳細にあなたにアクセスすることができます

(sender as FrameworkElement).DataContext 

を必要。例:

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

イベントハンドラContextMenuItem_Click,の中にブレークポイントを置くと、sendereのプロパティを調べることができます。あなたはおそらくそこにあなたの答えを見つけるでしょう。

これを行う1つの方法は、それらの単語にマウスを移動することです。もう1つは、イミディエイトウィンドウを使用することです。インテリセンスを得るには、senderとドットを入力します。

1

<StackPanel Tag="{Binding}">を使用した場合、((FrameworkElement)sender).TagはDataContextオブジェクトを返します(使用前にキャストする必要があります)。

関連する問題