9

WPF アプリケーションでは、現在、ショートカット キーを使用してアプリケーション内の任意の場所で電卓ツール フォームを起動するコマンドをバインドしようとしています。コマンドを作成しましたが、コマンドとショートカット キーをマップしてアプリケーションでユニバーサル ショートカット キーを作成する方法がわかりません。前もって感謝します。

4

2 に答える 2

7

これは xaml で実行できます。KeyBindingクラスのドキュメントの例を参照してください。

<Window.InputBindings>
  <KeyBinding Command="ApplicationCommands.Open"
              Gesture="CTRL+R" />
</Window.InputBindings>

更新: MVVM を使用している場合、xaml だけを使用して KeyBinding を ViewModel に実際にバインドすることはできないようです: こちらの Keybinding a RelayCommandを参照してください。

于 2009-08-23T20:45:01.163 に答える
4

WPF でショートカットを使用するには、それぞれのコントローラーにフォーカスする必要があります。ただし、InputManager を使用すると、アプリケーションのあらゆる種類の入力をキャプチャできます。ここでは、それぞれのコントローラーにフォーカスする必要はありません。

まず、イベントをサブスクライブする必要があります。

InputManager.Current.PreProcessInput -= Current_PreProcessInput;
InputManager.Current.PreProcessInput += Current_PreProcessInput;

それで、

private void Current_PreProcessInput(object sender, PreProcessInputEventArgs args)
    {
        try
        {
            if (args != null && args.StagingItem != null && args.StagingItem.Input != null)
            {
                InputEventArgs inputEvent = args.StagingItem.Input;

                if (inputEvent is KeyboardEventArgs)
                {
                    KeyboardEventArgs k = inputEvent as KeyboardEventArgs;
                    RoutedEvent r = k.RoutedEvent;
                    KeyEventArgs keyEvent = k as KeyEventArgs;

                    if (r == Keyboard.KeyDownEvent)
                    {
                    }

                    if (r == Keyboard.KeyUpEvent)
                    {
                    }
                }
            }
        }
        catch (Exception ex)
        {

        }
    }

このように、不要なものをすべて除外して、必要な入力を取得できます。これはショートカット キャプチャ アプリケーション用であるため、KeyDown および KeyUp イベントのみを取得しました。

押されたキーのすべての詳細を取得することもできます

keyEvent.Key.ToString()
于 2016-08-05T05:19:13.473 に答える