single.php

C# WinUI 3アプリでKeyDownイベントが検出されない場合の対処法

C# WinUI 3アプリを作っていく途中で、躓いた部分を備忘録的に投稿します。今回はKeyDownイベント取得について

KeyDownイベントを実装

C#で、WinUI 3プロジェクトの場合は、インターフェイス部分がXAML形式で構成されているので、タグに属性を追加する感じでイベントを追加していきます。

フォームがアクティブになっている時にキーボードのキー入力を取得したい場合は、StackPanelの部分に追加します。

<StackPanel KeyDown="Key_Down" ...>
</StackPanel>

KeyRoutedEventArgs を使う

難解なのは、csファイルに実装するプロシージャのプロトタイプ。

こんな感じで、何時ものようにKeyDownイベントを取得するプロシージャではキー入力を受け付けてくれません。。

private void Key_Down(object sender, KeyEventArgs e)

訳が分からない状態に陥ります。

正解は

private void Key_Down(object sender, KeyRoutedEventArgs e)

です。[KeyEventArgs ]じゃなくて[KeyRoutedEventArgs ]なんですよね。

後は、VirtualKeyクラスを使って、押されたキーを判別します。

private void Wheel_Changed(object sender, PointerRoutedEventArgs e)
{
  switch(e.Key)
  {
    case VitrualKey.Left
    //左矢印キーが押された
  }
  else
  {
    case VitrualKey.Right
    //右矢印キーが押された
  }

}

プロシージャの引数に、KeyEventArgs を使うとイベントを受付できません。

まとめ

今回は短い記事ですが、WinUI 3 アプリでキーボードのキー入力を受け付ける際のイベントを取得する方法を書きました。

WinFormsの時代とは違ってXAMLにイベントを書くのもそうですが、プロシージャで利用する引数を間違えると取得できなくなるので注意が必要です。

C#のWinUI 3アプリでキーボードのキー入力イベントを取得したい場合の参考になれば幸いです。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です