Domanda

Ho un'usercontrol riutilizzabile che utilizza alcuni comandi e gesti tastiera corrispondenti, (Specificamente fuga e Ctrl + 1 ... Ctrl + 9)

Ora, come io uso questo UserControl in più sedi che vorrei definire i gesti di ingresso nel UserControl, che funziona bene fino a quando il fuoco è all'interno del UserControl. Tuttavia, avrei bisogno di lavorare più a lungo focus è all'interno della pagina / finestra corrente.

Come posso farlo, o devo davvero fare attacchi di comando / input in ogni pagina?

È stato utile?

Soluzione

Si potrebbe gestire l'Loaded caso di UserControl e camminare l'albero logica per trovare la pagina possessore / finestra, quindi è possibile aggiungere le associazioni lì.

per es.

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)));
        }
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top