detect long touch (WPF and Microsoft Surface)

前提是你 提交于 2020-01-25 03:48:07

问题


Is there any way I can detect a long touch over a TextBlock (or a Label)?


回答1:


There is an event called TouchAndHoldGesture and PreviewTouchHoldGesture




回答2:


As far as I know there is no built in way so you would have to do something like this

• Capture the start time on the TouchDown event of the control

• Compare this to the release time in the TouchUup event

• If the two are different by X then run your long touch code

There might be a few things you have to code around but that is the basic idea




回答3:


It is possible to do that in an awaitable fashion. Create a timer with specific interval. Start it when user tapped and return the method when timer elapsed. If user release the hand, return the method with false flag.

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;
}

For more information, read this post.




回答4:


Long touch, or press and hold as I think it's formally named, can be detected through the right click event.
It may be that, if you are using a Surface Window, that the right click event is disabled.




回答5:


There is a ContactHoldGesture event on all Surface controls that you can use. But, and I say this as the guy responsible for creating this feature during my time at Microsoft, this event is very poorly designed and should not be used. It doesn't tell you when the system has decided that a finger has moved too much to count as a "hold" and it doesn't give you information needed to draw an animation telling the user that a "hold" is underway. Your much better off doing what @Kevin suggested and building your own implementation.



来源:https://stackoverflow.com/questions/8113604/detect-long-touch-wpf-and-microsoft-surface

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!