Wpf 键盘快捷键的命令路由

Wpf 键盘快捷键的命令路由,wpf,keyboard-shortcuts,routed-commands,icommand,Wpf,Keyboard Shortcuts,Routed Commands,Icommand,基本上,我想创建一个在窗口范围内有效的键盘快捷键,而不仅仅是在焦点位于绑定它的控件内时启用 更详细地说 我有一个有3个控件的窗口: 工具栏 文本框 自定义控件 工具栏上有一个按钮绑定到命令CustomCommands.CmdA,并链接到键盘快捷键Ctrl+T 我的自定义控件可以处理CmdA。当我运行应用程序并单击我的自定义控件时,CmdA已启用并正常工作。同时,Ctrl+T会触发命令 但是,当我选择文本框时,我的自定义命令CmdA将被禁用 我可以通过设置CmdA按钮的命令目标来纠正这一问题。

基本上,我想创建一个在窗口范围内有效的键盘快捷键,而不仅仅是在焦点位于绑定它的控件内时启用

更详细地说

我有一个有3个控件的窗口:

  • 工具栏
  • 文本框
  • 自定义控件
工具栏上有一个按钮绑定到命令
CustomCommands.CmdA
,并链接到键盘快捷键Ctrl+T

我的自定义控件可以处理
CmdA
。当我运行应用程序并单击我的自定义控件时,
CmdA
已启用并正常工作。同时,Ctrl+T会触发命令

但是,当我选择文本框时,我的自定义命令
CmdA
将被禁用

我可以通过设置
CmdA
按钮的命令目标来纠正这一问题。现在,当我选择文本框时,
CmdA
仍处于启用状态

但键盘快捷键Ctrl+T不起任何作用


有什么简单的方法可以改变键盘快捷键的范围吗?或者我是否需要在较低的位置捕捉按键,并找出它与哪个命令相关,然后自己发送它(如果有,是否有一个框架在其中执行此操作?

为此,您通常只需要在窗口中指定输入绑定,例如:

 <Window.InputBindings>
        <KeyBinding Key="N" Modifiers="Control" Command="New"/>
        ...
 </Window.InputBindings>

感谢H.B,但这会将“new”命令绑定到窗口代码中实现的“CommandBinding_Executed”函数。但是,用户控件需要处理它。这是一个更大的问题,因为用户控件是动态创建的,我不知道它将能够处理大约100个自定义命令中的哪一个。
<Window.CommandBindings>
        <CommandBinding Command="New" Executed="CommandBinding_Executed" />
        ...
</Window.CommandBindings>