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?

Était-ce utile?

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)));
        }
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top