我是WPF的新手,并且正在尝试解密RoutedCommands。 RoutedCommands从命令源开始,而不是传播vua冒泡和隧道传播。
但我可以停止这个过程吗?例如,我想设置CanExecute = false,而不是停止事件传播。
感谢您的帮助!
答案 0 :(得分:0)
我想,当RoutedCommand
- 处理程序将CanExecute
设置为CanExecute
时,您是否尝试阻止false
冒泡视觉树?如果是,请尝试以下操作:
设置e.Handled = true
。确保CommandTarget
设置正确,以便真正调用CanExecute
- 处理程序。
如果您将命令放在ContextMenu
中,这一点很重要。如果未指定CommandTarget
,则WPF将采用焦点元素,并且不会始终调用CanExecute
- 处理程序,因此可能由另一个处理程序解释。
像下面这样的东西可以完成这项工作:
<ContextMenu>
<MenuItem Command="DesiredCommand" CommandTarget="{Binding PlacementTarget,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=ContextMenu}}" .../>
...
</ContextMenu/>