没有修饰符的KeyBinding(在UserControl中)

时间:2011-02-11 19:13:05

标签: c# wpf

我想在按下一个键时执行一个命令(没有修饰符)。所以,我尝试了以下代码:

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

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

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

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

添加: 上面的代码在Window 中运行良好

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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/

答案 2 :(得分:0)

我想通过只使用一个键来设置一个输入绑定,例如&#34; Key.A&#34;

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

这对我很有用。