听孩子MenuItem点击

时间:2009-07-08 17:45:51

标签: wpf event-handling wpf-controls

是否有一种方法可以在按下子MenuItem时通知父MenuItem。 例如,我有

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

如何在单击b时通知事件处理程序。 理想情况下,Click事件可能是隧道或泡沫事件,但事实并非如此。 我想到的解决方案是在b上听取Click事件并将其转发给a,但这似乎非常沉重。 有更好的解决方案吗?

1 个答案:

答案 0 :(得分: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。这指向最初触发事件的控件。