gpt4 book ai didi

c# - 使用隧道而不是冒泡的 RoutedCommands

转载 作者:行者123 更新时间:2023-11-30 17:58:01 31 4
gpt4 key购买 nike

我有一个公开自定义命令的自定义控件 (MyControl)。我希望父 Window 能够调用此命令,并且所有 MyControls 都应该对此使用react。

我已将命令添加到 MyControlCommandBindings 集合中,它还提供了一个始终返回 true 的 CanExecute 回调。

我的问题是调用此命令的菜单项永远不会启用。我假设这是因为菜单在可视化树中的 MyControls 之上,但老实说,我对 RoutedUICommand 的作用域是如何工作的有点模糊.

有人可以澄清我做错了什么,或者这是否可能?

最佳答案

是的,重点是自定义命令的 CommandBinding 位于可视化树中菜单项的下方。来自 msdn

When the CanExecute method on a RoutedCommand is called, the PreviewCanExecute event is raised on the command target. If the event is not handled, the CanExecute event is raised. If the command target has a CommandBinding for the command, the CanExecute handler for that CommandBinding is called. If the command target does not have a CommandBinding for the command, the CanExecute event bubbles up the element tree searching for an element that has a CommandBinding associated with the command.

关于命令的非常好的文章 at this link .

无论如何,您都可以使用菜单项中的 CommandTarget 命令,例如

<MenuItem Header="Click me"  Command="local:CommandClass.MyCustomCommand" CommandTarget="{Binding ElementName=myCustomCtrl}" />

通过这种方式,特定的命令源(菜单项)将命令指向特定的目标(自定义控件的实例)。

关于c# - 使用隧道而不是冒泡的 RoutedCommands,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12726266/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com