2009-07-08 3 views
1

Есть ли способ, по которому родительский MenuItem должен быть уведомлен при нажатии дочернего MenuItem. Например, я у вас естьСлушайте ребенка MenuItem Нажмите

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

, как я могу добавить обработчик событий к, чтобы получить уведомление, когда б нажата. В идеале событие Click будет либо событием туннеля, либо пузырьком, но это не так. Решение, которое я имею в виду, - это прослушивание события Click на b и пересылка его на другое, но это кажется довольно тяжелым. Есть ли лучшее решение?

ответ

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