2017-11-03 5 views
0

아래 스 니펫은 실용적인 메뉴가있는 프로덕션 머신 샵 응용 프로그램입니다. 일부 메뉴 항목에 바로 가기 키를 추가하라는 요청을 받았습니다. 예를 들어 메뉴 항목 중 하나 (아래 코드 참조) 단축키로 F6 키를 추가해야합니다 (vs 단축키를 클릭하는 idendical 명령 참조) ... 원하는대로 작동하지만 단축키에 있습니다. 겉보기에는 아무런 효과가 없습니다 (아무 일도 일어나지 않습니다).WPF Telerik RadMenuItem On HotKey가 실행되지 않습니다.

내가 무엇이 없거나 잘못 되었습니까? 귀하의 도움에 미리 감사드립니다.

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