【问题标题】:How do I create a XAML KeyBinding for CTRL+'如何为 CTRL+' 创建 XAML 键绑定
【发布时间】:2019-12-17 19:00:28
【问题描述】:

在 WPF MVVM 应用程序中,我需要在按下 CTRL+'(控制和撇号)时触发命令。以下都不会编译...

<KeyBinding Modifiers="CTRL" Key="'" Command="{Binding MyCommand}"/>
<KeyBinding Modifiers="CTRL" Key="\'" Command="{Binding MyCommand}"/>
<KeyBinding Modifiers="CTRL" Key="&apos;" Command="{Binding MyCommand}"/>
<KeyBinding Gesture="CTRL+'" Command="{Binding MyCommand}"/>
<KeyBinding Gesture="CTRL+&apos;" Command="{Binding MyCommand}"/>
<KeyBinding Gesture="CTRL+\'" Command="{Binding MyCommand}"/>

那么这个组合键怎么实现呢?

【问题讨论】:

    标签: wpf xaml key-bindings apostrophe


    【解决方案1】:

    撇号不是键。它是一个字符,最终根据输入设备映射到一个键。 OemQuestion 在我的键盘上工作:

    <KeyBinding Modifiers="CTRL" Key="OemQuestion"  Command="{Binding MyCommand}"/>
    

    ...但如果您真的想检测何时输入了撇号,最好处理 PreviewTextInput 事件:

    How to detect when (forward) slash key is pressed in OEM keys C#

    【讨论】:

    • OemQuestion 在我的键盘上不起作用,但正如您所说,它需要通过某种击键事件进行处理。我已经在数据网格上的 PreviewTextInput 事件中添加了一个处理程序,在该事件中需要处理击键但由于某种原因它没有触发。 Nomatter,我明白了原则,我会解决它。感谢您的意见。
    【解决方案2】:

    撇号的关键代码是 OemQuotes。这种语法应该可以解决问题

       <KeyBinding Command="{Binding Command}"
              Modifiers="CTRL" Key="OemQuotes" />
    

    【讨论】:

    • 编译但命令不会触发。 Oem 部分让我觉得它可能与某种小众键盘有关。
    • 我注意到在密钥类型转换器 (System.Windows.Input.KeyConverter) 中,他们使用的是“QUOTES”密钥令牌。我用“QUOTES”替换了“OemQuotes”,它似乎正在工作。
    • QUOTES 不是 Key 参数的选项。 VS 为您提供所有可用值的下拉列表,而这不是其中之一。我也尝试过使用 Gesture="CTRL+QUOTES" 和 "CTRL+QUOTE" 但没有任何乐趣。
    • 您是否检查过在键盘上的 KeyDown 事件回调中,当按下 ' 键时收到了什么键码? Gesture="CTRL+QUOTES" 和 Gesture="CTRL" Key="Quotes" 在我这边工作正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    相关资源
    最近更新 更多