2010-08-20 112 views
1

我知道WPF中的事件冒泡了可视化树,所以我不明白为什么这个捕获上下文menuitem事件的简单示例在它的父列表框中单击事件不起作用:WPF Xaml中的事件冒泡点击事件

<ListBox Width="200" MenuItem.Click="MenuItem_Click"> 
    <ListBoxItem> 
     <TextBlock Text="Hello"> 
      <TextBlock.ContextMenu> 
       <ContextMenu> 
        <MenuItem Header="World 1"></MenuItem> 
        <MenuItem Header="World 2"></MenuItem> 
        <MenuItem Header="World 3"></MenuItem> 
       </ContextMenu> 
      </TextBlock.ContextMenu> 
     </TextBlock> 
    </ListBoxItem> 
</ListBox> 

我希望当任何的MenuItems的被点击调试器会打我的事件处理程序MenuItem_Click但它从来不会。任何人都可以请解释我做错了什么?

回答

4

ContextMenus(和它们的项目)在技术上并不是视觉树的一部分。他们不属于他们所属物品的“子女”。所以他们的事件不会冒泡给他们的主人。

一些更多的信息可以在这里找到:RoutedCommands in a ContextMenu

+0

呃。仔细检查一下,我所链接的文章没有多大帮助。它有*一些*额外的信息,所以我会留在答案。 – 2010-08-20 04:25:29

+0

好吧,我现在明白了,但是有没有其他方法可以完成同样的事情?我不想在所有MenuItems上写出事件调用(将会有很多) – 2010-08-20 11:34:56