2009-07-17 8 views
7

Ich möchte die Hilfedatei zu einer Seite basierend auf einer benutzerdefinierten Logik öffnen. Wie kann ich mit dem Benutzer umgehen, der F1 auf allen meinen Fenstern (Hauptfenster und modale Dialoge) drückt?Wie kann ich eine Tastenkombination in jedem WPF-Fenster behandeln?

Ich weiß, wie man F1 in einem einzigen Fenster behandelt, aber kann dies global getan werden, also muss ich nicht den gleichen Code zu allen meinen Fenstern hinzufügen?

Unten ist der Test, mit dem ich ausprobiert habe, dass F1 im untergeordneten Fenster nicht funktioniert.

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

Antwort

11

Ich habe die Antwort auf this Seite gefunden. Das heißt, setzen Sie dies in den Konstruktor des Hauptfensters zum Beispiel:

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

Es funktioniert auch für Kindsteuerelemente. I.e. Wenn das Kind-Steuerelement ausgewählt ist, wird es F1 behandeln, wenn der Handler seines Typs registriert ist, andernfalls wird der Fenster-Handler ausgelöst. –

Verwandte Themen