2009-07-03 3 views
3

Ich habe einen wieder verwendbaren Usercontrol zu schaffen, die ein paar Befehle und entsprechende Tastaturgesten verwendet, (speziell Flucht- und Strg + 1 ... Strg + 9)Wie Eingabegeste für Seite/Fenster aus einem Benutzersteuer

Jetzt, da ich diese Benutzersteuerung an mehreren Orten verwende, möchte ich die Eingabegeste in der Benutzersteuerung definieren, was gut funktioniert, solange der Fokus innerhalb der Benutzersteuerung liegt. Allerdings müsste es funktionieren, solange der Fokus innerhalb der aktuellen Seite/des aktuellen Fensters liegt.

Wie kann ich das machen, oder muss ich auf jeder Seite wirklich Befehls-/Eingabe-Bindings ausführen?

Antwort

3

Sie könnten mit dem Loaded Ereignis der UserControl umgehen und gehen Sie den logischen Baum auf die eigene Seite/Fenster zu finden, dann können Sie die Bindungen dort hinzufügen.

z.B.

public partial class Bogus : UserControl 
{ 
    public Bogus() 
    { 
     Loaded += (s, e) => { HookIntoWindow(); }; 
     InitializeComponent(); 
    } 

    private void HookIntoWindow() 
    { 
     var current = this.Parent; 
     while (!(current is Window) && current is FrameworkElement) 
     { 
      current = ((FrameworkElement)current).Parent; 
     } 
     if (current != null) 
     { 
      var window = current as Window; 
      // Add input bindings 
      var command = new AlertCommand(); 
      window.InputBindings.Add(new InputBinding(command, new KeyGesture(Key.D1, ModifierKeys.Control))); 
     } 
    } 
} 
Verwandte Themen