下面的代码片段来自生产机器商店应用程序,它有一个相当实用的菜单....我被要求为一些菜单项添加热键;例如,其中一个菜单项(如下面的代码所示)我需要将F6键添加为热键(注意点击vs热键的标准命令)...点击它可以按需运行,但是热键有似乎没有任何影响(没有任何反应)。
我错过了什么,或者做错了什么?在此先感谢您的帮助。
<telerik:RadMenuItem Name="ToolsMenu" Header="Tools">
<telerik:RadMenuItem Name="ToolsUseFinishLocationMenuItem" Header="Use Finish Location For Bin" Command="{Binding ToolsUseFinishLocationForBinCommand}" InputGestureText="F6">
<telerik:RadMenuItem.InputBindings>
<KeyBinding Key="F6" Command="{Binding ToolsUseFinishLocationForBinCommand}" />
</telerik:RadMenuItem.InputBindings>
</telerik:RadMenuItem>
</telerik:RadMenuItem>
答案 0 :(得分:0)
也许是因为你没有键盘专注于元素。您可以考虑将输入绑定到父元素,如
<Window>
<Window.InputBinding>
<KeyBinding ...>
</Window.InputBinding
<your element/>
</Window>
但也许问题出在其他地方。您还可以使用类InputManager为整个应用程序创建热键。
将这些行放到构造函数中:
InputManager.Current.PostNotifyInput -= PostNotifyInputHandler;
InputManager.Current.PostNotifyInput += PostNotifyInputHandler;
并制作了这样的方法:
private void PostNotifyInputHandler(object sender, NotifyInputEventArgs args)
{
var keyboardArgs = args?.StagingItem?.Input as KeyboardEventArgs;
var isSecondEvent = keyboardArgs?.RoutedEvent != Keyboard.PreviewKeyDownEvent;
var performedOnTextBox = keyboardArgs?.OriginalSource is System.Windows.Controls.TextBox;
if (isSecondEvent || performedOnTextBox)
{
return;
}
switch ((keyboardArgs as KeyEventArgs)?.Key)
{
case Key.F6:
// your command here
break;
}
}