2017-11-03 4 views
0

以下のスニペットは、実用的なメニューを備えたプロダクションマシンショップのアプリケーションです。いくつかのメニュー項目にホットキーを追加するように求められました。たとえば、メニュー項目の1つ(以下のコードに見られるように)F6キーをホットキーとして追加する必要があります(vsホットキーをクリックするためのidendicalコマンドに注意してください)...それをクリックするのは必要に応じて機能しますが、一見何の効果もありません(何も起こりません)。WPF Telerik RadMenuItemがホットキーで起動しない

私には何が欠けていますか、それとも間違っていますか?あなたの助けを前にありがとう。

<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

これは、要素にキーボードのフォーカスがないためかもしれません。あなたは親要素への入力をバインドすることについて考えることができます

<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; 
     } 
    } 
関連する問題