我有一个自定义控制( MyControl
暴露的自定义命令)。 我希望父Window
才能够调用此命令,所有MyControls
应该对其做出反应。
我已经添加了命令MyControl
的CommandBindings
收藏,这也提供了一个CanExecute
回调总是返回true。
我的问题是,从来没有调用此命令的菜单项被启用。 我假定这是因为菜单是上述MyControls
在视觉树,但说实话,我对如何有点模糊RoutedUICommand
的范围内工作的。
有人能解释我做错了什么,或者如果这甚至有可能?
是的,问题是,您的自定义命令是的CommandBinding在视觉树比你的菜单项。 从MSDN
当在所述的RoutedCommand方法CanExecute被调用时,PreviewCanExecute事件引发的命令目标。 如果不处理该事件时,CanExecute事件引发。 如果命令目标具有的命令的CommandBinding,对于在的CommandBinding处理CanExecute被调用。 如果命令目标不具有该命令的CommandBinding的CanExecute事件冒泡的元素树寻找具有与命令相关联的一个的CommandBinding元素。
有关命令一篇很好的文章,在这个环节 。
反正你可以使用CommandTarget命令从你的菜单项,如
<MenuItem Header="Click me" Command="local:CommandClass.MyCustomCommand" CommandTarget="{Binding ElementName=myCustomCtrl}" />
以这种方式,特定的命令源(菜单项)指示该命令的特定目标(定制控制的实例)。
我猜命令是错误的意思在这里。
命令用于捆绑不同的命令触发源到一个命令处理程序。 所以命令是从不同的控件,菜单,引发...但相同的命令处理程序被调用。
活动有几分opposit的。 一个来源可以触发多个事件处理程序。
在你的特殊情况,我宁愿一个事件,您的用户界面树下面的控制会比听隧道事件或冒泡事件。