C# WinUI 3アプリを作っていく途中で、躓いた部分を備忘録的に投稿します。今回はWinUI3プロジェクトでXaml上のButtonコントロールなどでマウスの右ボタンがクリックされたイベント(右クリック)を追加する方法です。
ClickではなくContextRequested
C#のWinUI 3プロジェクトでメインウィンドウはXamlで構成しますが、配置するButtonコントロールなどにはクリックなどのイベントを処理するClickプロパティが用意されていす。
しかし、実行時にコントロール上でマウスの右ボタンをクリックしても用意したイベントハンドラーは動作しません。
Formsプロジェクトの場合は、こんな感じでMouseUpイベントなどで、MouseEventArgsからマウスのボタンを見分けることができます。
private void button_MouseUp(object sender, MouseEventArgs e)
{
if(e.Button == MouseButtons.Right)
{
Debug.Print("右クリック!");
}
}
色々調べてみて、Buttonコントロールなどでは、Context○○イベントで右クリックを取得できました。
Windows.Formsが現役だった私にとって、WinUI3は随分分かり辛くなってきました。これが業界標準になるので、慣れるしかありません。(笑)
ContextRequestedイベントを実装
さっそく右クリックを実装していきます。
まずはXamlで、Buttonコントロールなどに”ContextRequested”を追加します。
<Button ContextRequested="ImageButton_ContextRequested" />
ContextRequestedの他にも、ContextFlyout、ContextCanceledとContextで始まるイベントがあります。
右クリックでメニューを表示する際に利用するので単純にコントロール上でマウスの右クリックを検出したい場合はContextRequestedだけで十分です。
次に、ContextRequestedで設定したイベントハンドラをCSファイルに追加します。
private void ImageButton_ContextRequested(object sender, RoutedEventArgs e)
{
Debug.Print("右クリック!");
}
第2引数が[RoutedEventArgs ]になっているのに注意してください。(汎用的な[EventArgs]だとエラーになります)
まとめ
今回は短い記事ですが、WinUI 3 アプリでマウスの右クリックを取得する方法について書きました。
Windowsフォームアプリであれば、コントロールの「MouseUp」イベントなどのMouseEventArgsを使って右クリックを判定できますが、WinUI3の場合にはMouseUpイベントがありません。
そのためContextRequestedイベントで実装することで右クリックの取得が可能です。
C#のWinUI 3アプリでマウスの右クリックを取得したい場合の参考になれば幸いです。
スポンサーリンク
最後までご覧いただき、ありがとうございます。