Comment créer geste d'entrée pour la page / fenêtre d'un contrôle utilisateur
-
21-08-2019 - |
Question
J'ai un usercontrol réutilisable qui utilise quelques commandes et gestes de clavier correspondants, (En particulier échapper et Ctrl + 1 ... Ctrl + 9)
Maintenant que j'utilise cette usercontrol à plusieurs endroits que je voudrais définir les gestes d'entrée dans le usercontrol, qui fonctionne très bien aussi longtemps que l'accent est mis dans le usercontrol. Cependant, je besoin de travailler aussi longtemps que l'accent est dans la page courante / fenêtre.
Comment puis-je le faire, ou dois-je vraiment faire des liaisons commande / entrée sur chaque page?
La solution
Vous pouvez gérer l'événement du Loaded
et UserControl
marcher l'arbre logique pour trouver la page possédante / fenêtre, vous pouvez ajouter les liaisons là.
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)));
}
}
}