2009-07-31 18 views
0

私は、各メニュー項目のテキストが文字列リストの要素であるように、文字列のリストにバインドされたコンテキストメニューを持っています。各メニュー項目は同じイベントハンドラに設定されています。私がしようとしているのは、イベントハンドラが呼び出されたときにどのメニューアイテムがクリックされたかを把握することです。クリックされたメニュー項目のテキストを取得しますか?

私はそれがかなり簡単に行うと思うだろうが、私はちょっと困っている。

私はウォッチウィンドウを見ると、FocusedItemというメニューアイテムのプロパティがあります。それは私が必要とする情報を持っていますが、私はそれを使用しようとするとクラスの一部ではないように見え、コードはコンパイルされません。

誰かが私を正しい方向に向けることができますか?

XAMLとコード私はとのトラブルを抱えているのビット:

<MenuItem Header="Add Object" ItemsSource="{Binding ObjectClassList}" Click="AddObject_Click"/> 

    private void AddObject_Click(object sender, RoutedEventArgs e) 
    { 
     MenuItem menuItem = sender as MenuItem; 

     if (menuItem == null) 
     { 
      return; 
     } 

     // menuItem.FocusedItem // ?? does not compile 


    } 

ありがとう!

答えて

3

これは私のために動作しますが、100%確実ではない、それは正しい方法だ(それはしかし正しい道の上だ!)

MenuItem m = (MenuItem)e.OriginalSource; 

私は「コンテナ」メニュー項目は、イベントをラップしているとして、それは、正しいです信じてあなたが追加した文字列メニュー項目のために。 「OriginalSource」文字列メニュー項目をクリックされます...

+0

ああ、はい。それはそれだった。私は間違ったことを使っていた。さらに、テキストを取得するのは、Headerプロパティを文字列として取得するのと同じくらい簡単です。 – djcouchycouch

2

Sk93で受け入れ答えを読み取る際に役立つかもしれないいくつかの注意事項:

void Handle_RoutedEvent(object sender, RoutedEventArgs e) 
  • 送信者が持っている論理的な要素であり、イベントハンドラを定義しました。
  • RoutedEventArgs.sourceは、イベントハンドラを定義した論理要素です。
  • RoutedEventArgs.originalSourceは、ユーザーがクリックした視覚的な要素です。
関連する問題