Q047. ショートカットキーでイベントもしくはコマンドを実行するにはどうすればいいのですか?

A. KeyBinding を使います。



例えば画面を閉じる処理を F12 キーと結び付けたい場合、以下のようにします。


まず Window のコードビハインド側に以下のコードがあるとします。(とりあえず VB ですが・・・)

Partial Public Class Window1
    ''' <summary>閉じるを実行</summary>
    Private Sub ExecuteClose(ByVal sender As Object, ByVal e As RoutedEventArgs)
        Me.Close()
    End Sub
End Class


XAML 側では以下のように CommandBindingApplicationCommands.Close プロパティに結び付け、KeyBinding で F12 キーと関連付けます。

<Window ・・・・・>
    <Window.CommandBindings>
        <CommandBinding Command="Close" Executed="ExecuteClose" />
    </Window.CommandBindings>
    <Window.InputBindings>
        <KeyBinding Gesture="F12" Command="Close" />
    </Window.InputBindings>
</Window>


もしくは以下のように、コードビハインドで定義するのもいいかも知れません。

Partial Public Class SystemWindow
    ''' <summary>コンストラクタ</summary>
    Public Sub New()
        InitializeComponent()
        Dim context = New SystemViewModel()
        Me.DataContext = context
        Me.InputBindings.Add(New KeyBinding(context.OnUpdate, New KeyGesture(Key.F5)))
    End Sub
End Class


KeyBinding に関しては資料が少なく、私もよく判っていないため現在勉強中です。今回の記事は、id:okazuki さんの以下の記事を参考にさせて頂きました。
関連記事コマンドですよ その8 「用意されてるコマンド」


WPF FAQ の目次に戻る