我有这个代码:
<Menu IsMainMenu="True">
<MenuItem Header="Parent" Click="ParentItem_Click" >
<MenuItem Header="Child" Click="ChildItem_Click">
</MenuItem>
</MenuItem>
</Menu>
Run Code Online (Sandbox Code Playgroud)
当我单击子MenuItem时,父MenuItem也将被提升。我不希望那个父母事件发生。
这是带有冒泡路由策略的事件的标准行为。您可以eventArgs.Handled = true在事件处理程序中手动设置。请参阅将路由事件标记为已处理和类处理
考虑到该Click事件未与类似的隧道事件配对PreviewClick-您可以尝试使用PreviewMouseDown PreviewMouseUp隧道事件,并查看是否可以将逻辑附加到这些事件。
冒泡:调用事件源上的事件处理程序。然后,路由事件路由到连续的父元素,直到到达元素树的根。大多数路由事件都使用冒泡路由策略。冒泡路由事件通常用于报告来自不同控件或其他UI元素的输入或状态更改。
直接:只有源元素本身才有机会调用处理程序作为响应。这类似于Windows窗体用于事件的“路由”。但是,与标准CLR事件不同,直接路由事件支持类处理(将在后面的部分中说明类处理),并且可由EventSetter和EventTrigger使用。
隧道传输:最初,将调用元素树根目录处的事件处理程序。然后,路由事件沿着路径沿连续的子元素行进,到达作为路由事件源的节点元素(引发路由事件的元素)。隧道路由事件通常作为控件复合的一部分来使用或处理,从而可以有意抑制来自复合零件的事件,或者将其替换为特定于整个控件的事件。WPF中提供的输入事件通常实现为隧道/冒泡对。隧道事件有时也称为“预览”事件,因为该对使用了命名约定。
| 归档时间: |
|
| 查看次数: |
1527 次 |
| 最近记录: |