【问题标题】:Command routing for Keyboard shortcuts键盘快捷键的命令路由
【发布时间】:2011-06-06 05:10:22
【问题描述】:

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

更详细....

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

  • 工具栏
  • 一个文本框
  • 自定义控件

工具栏有一个绑定到命令CustomCommands.CmdA 的按钮,并链接到键盘快捷键Ctrl+T

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

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

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

但是键盘快捷键 Ctrl+T 什么都不做。

是否有任何简单的方法可以更改键盘快捷键的范围?或者我是否需要在较低的某个地方捕捉按键,并计算出它与哪个命令相关并自己路由它(如果是的话,是否有一个框架可以做到这一点?)

【问题讨论】:

    标签: wpf keyboard-shortcuts routed-commands icommand


    【解决方案1】:

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

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

    对于内置应用程序命令(RoutedCommands),您还需要在窗口中显示CommandBinding

    <Window.CommandBindings>
            <CommandBinding Command="New" Executed="CommandBinding_Executed" />
            ...
    </Window.CommandBindings>
    

    【讨论】:

    • 感谢 H.B,但这会将“新”命令绑定到在 Window 后面的代码中实现的“CommandBinding_Executed”函数。但是,用户控件需要处理它。这是一个更大的问题,因为用户控件是动态创建的,我不知道它能够处理大约 100 个自定义命令中的哪一个。
    猜你喜欢
    • 2022-01-09
    • 2013-09-25
    • 2017-07-07
    • 2011-03-22
    • 2021-07-17
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多