MouseRightButtonDown イベントを使用して、タッチ プレス アンド ホールド ジェスチャを検出することができます。残念ながら、画面から指を離すまで発火しません。これは遅すぎる!
誰にもアイデアはありますか?前もって感謝します。
これは、待機可能な方法で行うことができます。特定の間隔でタイマーを作成します。ユーザーがタップしたときに開始し、タイマーが経過したときにメソッドを返します。ユーザーが手を離した場合は、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;
}
詳細については、この投稿をお読みください。
素晴らしいコードです。完全を期すために使用例を追加します。
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>
Blake.NUIツールキットが提供するホールドジェスチャを使用する