是否有一种方法可以在按下子MenuItem时通知父MenuItem。 例如,我有
<MenuItem Name='a'>
<MenuItem Name='b' Header='...'/>
</MenuItem>
如何在单击b时通知事件处理程序。 理想情况下,Click事件可能是隧道或泡沫事件,但事实并非如此。 我想到的解决方案是在b上听取Click事件并将其转发给a,但这似乎非常沉重。 有更好的解决方案吗?
答案 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
。这指向最初触发事件的控件。