mostlytech
mostlytech

Reputation: 814

How to create input gesture for page/window from an user control

I have a reusable usercontrol that uses a few commands and corresponding keyboard gestures, (specifically Escape and Ctrl+1...Ctrl+9)

Now as I use this usercontrol in multiple locations I'd like to define the input gestures in the usercontrol, which works fine as long as the focus is within the usercontrol. However, I'd need it to work as long as focus is within the current page/window.

How can I do it, or do I really have to do command/input bindings on every page?

Upvotes: 4

Views: 1812

Answers (1)

brunnerh
brunnerh

Reputation: 184441

You could handle the Loaded event of the UserControl and walk up the logical tree to find the owning page/window, then you can add the bindings there.

e.g.

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

Upvotes: 3

Related Questions