【问题标题】:KeyBinding with no modifiers (in UserControl)没有修饰符的键绑定(在 UserControl 中)
【发布时间】:2015-02-01 01:32:59
【问题描述】:

我想在按下键时执行命令(不带修饰符)。所以,我尝试了下面的代码:

<UserControl.InputBindings>
    <KeyBinding Key="A" Command="{Binding ACommand}" />
</UserControl.InputBindings>

但是,KeyBinding 支持的不是键,而是键和修饰符。

现在我考虑使用 Behavior 并处理 KeyDown 事件。但这太复杂了。

有人知道更简单的解决方案吗?

添加: 上面的代码在在窗口中运行良好。

我在 UserControl 中找到了解决方案。 (使用 .NET Framework 4)

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    我不太明白你的问题是什么。您编写的代码应该可以工作,无需指定修饰符。

    我想问题可能是您的绑定或您设置键绑定的控件无法聚焦,因此不会触发。

    【讨论】:

    • 谢谢,但该代码仅在功能键中有效。我想将命令绑定到普通键,例如'A'或'R'......
    • 这不是真的,它适用于所有键。我也多次将它用于普通键。
    • 如果您不相信可以通过设置Modifiers="None"来尝试“正确”的方式。
    • Modifiers="None" 无法转换为有效的修饰符。根据 MSDN,“一个有效的 KeyGesture 必须包含一个 Key 和一个或多个 ModifierKeys”。 (msdn.microsoft.com/en-us/library/…)
    • 我知道,但那是指 KeyGestures,即 KeyGesture="A" 在自己的作品上设置 Key="A" 时将无效。
    【解决方案2】:

    Microsoft 不支持绑定到您在文本框中键入时可能按下的普通键 - 除非它具有修饰符。您可以绑定到功能键(如 F1)和其他一些没有修饰符的键。 见:http://msdn.microsoft.com/en-us/library/system.windows.input.keygesture(v=vs.110).aspx

    我看到一个博客说他能够通过从 InputGesture 继承并实现 Matches 函数来创建自己的 KeyGesture 类来解决这个问题。 http://dikhi.wordpress.com/2008/06/27/keygesture-doesnt-work-with-alpha-numeric-key/

    【讨论】:

      【解决方案3】:

      我想出了一个方法来设置一个 InputBinding 只使用一个像“Key.A”这样的键

      boolean noMod = ModifierKeys == ModifierKeys.None;
      KeyBinding inputBinding = new KeyBinding(this, Keys, noMod ? ModifierKeys.Alt : ModifierKeys));
      if (noMod)
      {
          inputBinding.ClearValue(KeyBinding.ModifiersProperty);
      }
      

      这对我来说很好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多