1

MouseRightButtonDown イベントを使用して、タッチ プレス アンド ホールド ジェスチャを検出することができます。残念ながら、画面から指を離すまで発火しません。これは遅すぎる!

誰にもアイデアはありますか?前もって感謝します。

4

5 に答える 5

5

これは、待機可能な方法で行うことができます。特定の間隔でタイマーを作成します。ユーザーがタップしたときに開始し、タイマーが経過したときにメソッドを返します。ユーザーが手を離した場合は、false フラグでメソッドを返します。

public static Task<bool> TouchHold(this FrameworkElement element, TimeSpan duration)
{
    DispatcherTimer timer = new DispatcherTimer();
    TaskCompletionSource<bool> task = new TaskCompletionSource<bool>();
    timer.Interval = duration;

    MouseButtonEventHandler touchUpHandler = delegate
    {
        timer.Stop();
        if (task.Task.Status == TaskStatus.Running)
        {
            task.SetResult(false);
        }
    };

    element.PreviewMouseUp += touchUpHandler;

    timer.Tick += delegate
    {
        element.PreviewMouseUp -= touchUpHandler;
        timer.Stop();
        task.SetResult(true);
    };

    timer.Start();
    return task.Task;
}

詳細については、この投稿をお読みください。

于 2014-08-07T06:31:28.320 に答える
2

素晴らしいコードです。完全を期すために使用例を追加します。

private async void btn_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
  if (await TouchHold(btn, TimeSpan.FromSeconds(2)))
  {
    // todo: long press code goes here
  }
}

XAML から:

<Button Name="btn" PreviewMouseDown="btn_PreviewMouseDown">Press long</Button>
于 2017-05-24T22:23:39.553 に答える
1

Blake.NUIツールキットが提供するホールドジェスチャを使用する

于 2013-03-05T21:24:03.327 に答える