single.php

C# WinUI3でタッチパッドの2本指のスワイプジェスチャーを検出する方法

C# WinUI 3アプリを作っていく途中で、調べたことを忘録的に投稿します。今回はWinUI3プロジェクトでタッチパッドを利用してコンテンツ上で2本指のスワイプジェスチャーを検出する方法です。

[Manipulation]イベントは発生しない

公式ドキュメント[タッチ操作開発者向けガイド]に記載がありますが、タッチパッドではアプリで複数の指による操作や速度データを必要とする操作をサポートする[Manipulation]関連の操作イベントが利用できません。

タッチパッドでは操作イベントは発生しません。 代わりに、タッチパッド入力に対してポインター イベントが発生します。

タッチ操作イベントは発生しませんが、タッチパッドで[スクロールで更新]機能などはWinUI3にも追加できます。

詳しい内容は、別記事をご覧ください。

[PointerWheelChanged]イベントで代用

タッチパッドでは操作イベントは利用できませんが、マウスなどの操作で利用できる[PointerWheelChanged]イベントが代用ができます。

マウスなどの入力デバイスでは、下向きにスクロールしても上限を越えてコンテンツをスライドができません。

例えば、タッチパッドでの操作を受け取るコンテンツに[PointerWheelChanged]イベントを追加します。

<Grid PointerWheelChanged="Grid_PointerWheelChanged">

</Grid>

イベントに次のコードを追加します。

private void Grid_PointerWheelChanged(object sender, PointerRoutedEventArgs e)
{
  Microsoft.UI.Input.PointerPoint ptrPt = e.GetCurrentPoint((UIElement)sender);
  bool IsHorizontalMouseWheel = ptrPt.Properties.IsHorizontalMouseWheel;
  int mousewheelDelta = ptrPt.Properties.MouseWheelDelta;
  if (IsHorizontalMouseWheel == true)
  {
    if (mousewheelDelta < 0)
    {
      //2本指で右側にスワイプ
    }
    else
    {
      //2本指で左側にスワイプ
    }
  }
}

タッチパッド上で2本指でスワイプした場合、マウスの水平スクロールのイベントが発生するようです。

イベント内で、水平スクロール[IsHorizontalMouseWheel = True]とホイールの移動量[MouseWheelDelta]を利用して、スワイプの方向が検出できます。

Windowsのジェスチャーでは、2本指でのスワイプは既定値では[戻る]や[進む]に割り当てられています。

そのため、アプリのコンテンツを前に戻すなどの操作を追加したい場合に使えそうです。

まとめ

今回は、WinUI3プロジェクトでタッチパッドを利用してコンテンツ上で2本指のスワイプジェスチャーを検出する方法について紹介しました。

タッチパッド上で2本指でスワイプした場合、マウスのスクロールイベントが発生します。

そのためイベント内で、水平スクロールとホイールの移動量を利用して、スワイプの方向が検出できます。

WinUI 3 アプリで、タッチパッドを利用した2本指のスワイプ操作でアプリの動作を追加したい人の参考になれば幸いです。

スポンサーリンク

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

コメントを残す

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