1

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

かなり簡単にできると思いますが、少し困惑しています。

ウォッチ ウィンドウを見ると、FocusedItem という menuitem プロパティがあります。必要な情報が含まれていますが、それを使用しようとすると、クラスの一部ではないように見え、コードがコンパイルされません。これは奇妙だと思います。

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

私が問題を抱えている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


    }

ありがとう!

4

2 に答える 2

4

これは私にとってはうまくいきますが、それが正しい方法であると100%確信しているわけではありません(ただし、正しい道を進んでいます!)

MenuItem m = (MenuItem)e.OriginalSource;

「コンテナ」メニュー項目は、追加した文字列メニュー項目のイベントをまとめているため、正しいと思います。「OriginalSource」は、文字列メニュー項目のクリックになります...

于 2009-07-31T15:24:40.713 に答える
2

Sk93 によって受け入れられた回答を読むときに役立つかもしれないいくつかのメモ:

void Handle_RoutedEvent(object sender, RoutedEventArgs e)
  • sender は、イベント ハンドラーを定義した論理要素です。
  • RoutedEventArgs.source は、イベント ハンドラーを定義した論理要素です。
  • RoutedEventArgs.originalSource は、ユーザーがクリックした視覚要素です。
于 2009-12-08T23:19:09.480 に答える