WPF Telerik RadMenuItem在HotKey上没有触发

时间:2017-11-03 19:42:35

标签: c# wpf mvvm telerik

下面的代码片段来自生产机器商店应用程序,它有一个相当实用的菜单....我被要求为一些菜单项添加热键;例如,其中一个菜单项(如下面的代码所示)我需要将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>

1 个答案:

答案 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;
        }
     }