2009-07-08 105 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