2009-07-08 4 views
1

Gibt es eine Möglichkeit, dass ein übergeordnetes MenuItem benachrichtigt wird, wenn ein untergeordnetes MenuItem gedrückt wird. Zum Beispiel habe ich SieListen to child MenuItem Klicken Sie auf

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

, wie ich einen Ereignishandler ein hinzufügen kann benachrichtigt werden, wenn b geklickt wird. Im Idealfall wäre das Click-Ereignis entweder ein Tunnel- oder ein Bubble-Ereignis, dies ist jedoch nicht der Fall. Die Lösung, die ich im Sinn habe, ist das Click-Event auf b zu hören und weiterzuleiten, aber das scheint ziemlich schwer zu sein. Gibt es eine bessere Lösung?

Antwort

3

MenuItem.Click ist ein Routing-Ereignis (es sprudelt), so können Sie es einfach auf der ersten MenuItem abonnieren und von allen Kindern gleichzeitig benachrichtigt werden.

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

Der Trick ist RoutedEventArgs.OriginalSource zu verwenden, anstatt sender. Dies verweist auf das Steuerelement, das ursprünglich das Ereignis ausgelöst hat.

+0

Sie haben Recht. Es ist ein Blasenereignis. – tom7

Verwandte Themen