2009-07-17 14 views
7

Chcę otworzyć plik pomocy na stronie na podstawie niestandardowej logiki. Jak mogę obsłużyć użytkownika naciskając klawisz F1 na wszystkich moich oknach (główne okno dialogowe i modalne)?Jak mogę obsługiwać klawisz skrótu w każdym oknie WPF?

W jaki sposób obsługiwać F1 w jednym oknie, ale czy można to zrobić globalnie, więc nie muszę dodawać tego samego kodu do wszystkich moich okien?

Poniżej znajduje się test, na podstawie którego wypróbowałem, że F1 nie działa w oknie podrzędnym.

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

Odpowiedz

11

Znalazłem odpowiedź na this stronie. To znaczy, umieść to w konstruktorze okna głównego, na przykład:

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

Działa również w przypadku kontrolek podrzędnych. To znaczy. jeśli wybrana jest kontrola podrzędna, wówczas będzie obsługiwać F1, jeśli zostanie zarejestrowany program obsługi tego typu, w przeciwnym razie zostanie wywołany program obsługi okna. –

Powiązane problemy