2009-07-08 102 views
1

有沒有一種方法可以讓孩子MenuItem被按下時通知父MenuItem。 例如,我必須收聽孩子MenuItem點擊

<MenuItem Name='a'> 
    <MenuItem Name='b' Header='...'/> 
</MenuItem> 

我怎麼可以添加事件處理程序到被點擊b當被通知。 理想情況下,Click事件可能是隧道或氣泡事件,但事實並非如此。 我想到的解決方案是聽b上的Click事件並將其轉發給a,但這似乎相當笨拙。 有更好的解決方案嗎?

回答

3

MenuItem.Click是一個路由事件(它泡了起來),所以你可以在第一個MenuItem訂閱它,並同時通知所有的孩子。

XAML:

<MenuItem Name='a' Click='OnMenuItemClicked'> 
    <MenuItem Name='b' Header='...' /> 
</MenuItem> 

C#:

private void OnMenuItemClicked(object sender, RoutedEventArgs e) 
{ 
    MenuItem item = e.OriginalSource as MenuItem; 
    if(null != item) 
    { 
     // Handle the menu item click here 
    } 
} 

的技巧是使用RoutedEventArgs.OriginalSource,而不是sender。這指向最初引發該事件的控制。

+0

你是對的。這是一場泡沫事件。 – tom7 2009-07-08 18:04:19