2009-07-08 7 views
1

Existe-t-il un moyen pour un parent MenuItem d'être averti lorsqu'un MenuItem enfant est enfoncé. Par exemple, je vousÉcouter l'enfant MenuItem Cliquez sur

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

comment puis-je ajouter un gestionnaire d'événements à un être averti lorsque b est cliqué. Idéalement, l'événement Click serait soit un tunnel ou un événement bulle mais ce n'est pas le cas. La solution que j'ai à l'esprit est d'écouter l'événement Click sur b et de le transmettre à un mais cela semble assez lourd. Y a-t-il une meilleure solution?

Répondre

3

MenuItem.ClickMenuItem.ClickMenuItem.Click est un événement routé (il fait des bulles), donc vous pouvez simplement vous y abonner sur le premier MenuItem et être informé de tous les enfants en même temps.

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 
    } 
} 

L'astuce consiste à utiliser RoutedEventArgs.OriginalSource, plutôt que sender. Cela indique le contrôle qui a initialement déclenché l'événement.

+0

vous avez raison. C'est un événement de bulle. – tom7