обнаружить долгое касание (WPF и Microsoft Surface) - PullRequest
1 голос
/ 13 ноября 2011

Можно ли как-нибудь обнаружить длинное прикосновение к текстовому блоку (или метке)?

Ответы [ 5 ]

3 голосов
/ 23 марта 2012

Существует событие под названием TouchAndHoldGesture и PreviewTouchHoldGesture

2 голосов
/ 07 августа 2014

Это можно сделать в приемлемом порядке. Создать таймер с определенным интервалом. Запустите его, когда пользователь нажал, и верните метод, когда истек таймер. Если пользователь отпустил руку, верните метод с флагом 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;
}

Для получения дополнительной информации, прочитайте эту запись .

2 голосов
/ 14 ноября 2011

Насколько я знаю, нет встроенного способа, поэтому вам придется сделать что-то вроде этого

• Захватить время начала события TouchDown элемента управления

• Сравните эток времени выпуска в событии TouchUup

• Если они различаются по X, запустите свой длинный сенсорный код

Возможно, вам придется кодировать несколько вещей, но это основноеидея

0 голосов
/ 14 ноября 2011

На всех элементах управления Surface можно использовать событие ContactHoldGesture. Но, и я говорю это как парень, ответственный за создание этой функции во время моего пребывания в Microsoft, это событие очень плохо спроектировано и не должно использоваться. Она не сообщает вам, когда система решила, что палец слишком сильно сдвинулся, чтобы считаться «удержанием», и не дает вам информации, необходимой для рисования анимации, сообщающей пользователю о том, что «удержание» выполняется. Вам гораздо лучше делать то, что предлагал @Kevin, и создавать собственную реализацию.

0 голосов
/ 14 ноября 2011

Длинное касание или нажатие и удержание, как мне кажется, формально названное, может быть обнаружено по событию правой кнопки мыши.
Может случиться так, что, если вы используете Окно поверхности, событие правого клика отключено.

...