2009-07-31 91 views
0

我有一個上下文菜單綁定到一個字符串列表,以便每個菜單項的文本是字符串列表的一個元素。每個菜單項設置爲相同的事件處理程序。我想要做的是找出當事件處理程序被調用時,哪個菜單項被點擊。我認爲這將是相當直接的做法,但我有點難住。獲取被點擊的菜單項的文本?

如果我看着觀察窗口,有一個名爲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 


    } 

謝謝!

回答

3

這對我的作品,但不是100%肯定這是正確的方式(它雖然是在正確的道路上!)

MenuItem m = (MenuItem)e.OriginalSource; 

我相信這是正確的,因爲「容器」菜單項被包裹起來的事件爲你添加的字符串菜單項。該「OriginalSource」將在字符串的菜單項的點擊...

+0

啊,是的。就是這樣。我使用了錯誤的東西。另外,獲取文本與將Header屬性作爲字符串一樣簡單。 – djcouchycouch 2009-07-31 15:46:26

2

的一些注意事項閱讀由Sk93接受的答案時可能會有所幫助:

void Handle_RoutedEvent(object sender, RoutedEventArgs e) 
  • 發件人是具有邏輯元素定義事件處理程序。
  • RoutedEventArgs.source是定義事件處理程序的邏輯元素。
  • RoutedEventArgs.originalSource是用戶點擊的可視元素。