2009-07-03 6 views
3

j'ai un usercontrol réutilisable qui utilise quelques commandes et des gestes de clavier correspondantes, (en particulier échappement et Ctrl + 1 ... Ctrl + 9)Comment créer geste d'entrée pour la page/fenêtre à partir d'une commande d'utilisateur

Maintenant que j'utilise ce contrôle utilisateur dans plusieurs endroits, je voudrais définir les gestes d'entrée dans la commande usercontrol, ce qui fonctionne bien tant que le focus est dans la commande usercontrol. Cependant, j'en aurais besoin pour travailler tant que la mise au point est dans la page/fenêtre actuelle.

Comment puis-je le faire, ou dois-je vraiment faire des liaisons de commande/d'entrée sur chaque page?

Répondre

3

Vous pouvez gérer l'événement Loaded du UserControl et remonter l'arborescence logique pour trouver la page/fenêtre propriétaire, puis y ajouter les liaisons.

par exemple.

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))); 
     } 
    } 
} 
Questions connexes