3

いくつかのコマンドと対応するキーボードジェスチャ(具体的にはEscapeとCtrl + 1 ... Ctrl + 9)を使用する再利用可能なユーザーコントロールがあります

このユーザーコントロールを複数の場所で使用するので、ユーザーコントロールで入力ジェスチャを定義したいと思います。これは、フォーカスがユーザーコントロール内にある限り正常に機能します。ただし、フォーカスが現在のページ/ウィンドウ内にある限り、機能する必要があります。

どうすればそれを行うことができますか、または実際にすべてのページでコマンド/入力バインディングを行う必要がありますか?

4

1 に答える 1

3

Loadedのイベントを処理UserControlし、論理ツリーをたどって所有ページ/ウィンドウを見つけ、そこにバインディングを追加できます。

例えば

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)));
        }
    }
}
于 2011-06-13T23:26:33.527 に答える