2009-07-17 2 views
7

일부 사용자 지정 논리를 기반으로 페이지에 도움말 파일을 열려고합니다. 모든 창 (주 창 및 모달 대화 상자)에서 F1 키를 누른 사용자를 어떻게 처리합니까?모든 WPF 창에서 바로 가기 키를 처리하려면 어떻게해야합니까?

나는 단일 창에서 F1을 처리하는 방법을 알고 있지만이 작업은 전체적으로 수행 할 수 있으므로 모든 창에 동일한 코드를 추가 할 필요가 없습니다.

다음은 F1이 하위 창에서 작동하지 않는다는 것을 테스트 한 테스트입니다.

Window1.xaml :

<Window x:Class="WpfApplication2.Window1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Window.CommandBindings> 
     <CommandBinding Command="ApplicationCommands.Help" 
         Executed="CommandBinding_Executed"/> 
    </Window.CommandBindings> 
    <Grid> 
     <Button Content="Open a new window" 
       Click="Button_Click"/> 
    </Grid> 
</Window> 

Window1.xaml.cs은 :

using System.Windows; 
using System.Windows.Input; 

namespace WpfApplication2 
{ 
    partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 
     } 

     void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e) 
     { 
      MessageBox.Show("Help"); 
     } 

     void Button_Click(object sender, RoutedEventArgs e) 
     { 
      new Window().ShowDialog(); 
     } 
    } 
} 

답변

11

나는 this 페이지에서 답을 찾았습니다. 즉, 이것을 메인 윈도우의 생성자에 넣으십시오 :

CommandManager.RegisterClassCommandBinding(typeof(Window), 
    new CommandBinding(ApplicationCommands.Help, 
     (x, y) => MessageBox.Show("Help"))); 
+0

이것은 하위 컨트롤에도 적용됩니다. 나는. 자식 컨트롤이 선택되면 그 타입의 핸들러가 등록 된 경우 F1을 처리합니다. 그렇지 않으면 윈도우 핸들러가 트리거됩니다. –

관련 문제