MouseDoubleClick & Touch на ScatterViewItem - PullRequest
       23

MouseDoubleClick & Touch на ScatterViewItem

1 голос
/ 02 августа 2011

Я разрабатываю сенсорное приложение WPF4, в котором используются некоторые элементы управления Microsoft Surface.Я хотел бы поймать событие MouseDoubleClick для ScatterViewItem.Событие срабатывает, когда я использую мышь, но когда я использую свой палец, событие никогда не возникает.Почему?

Большое спасибо.

ОБНОВЛЕНИЕ :

Я наконец написал этот код для воспроизведения простого двойного касания с событием TouchLeave на ограниченном прямоугольнике(Ширина и высота 16px) и 500 мс в течение необходимого времени между 2 событиями TouchLeave.Этот код не оптимизирован, но он работает, если у вас есть замечания, не стесняйтесь:)

private bool _doubleHasTimeAndPos = false;

private TimeSpan? _doubleTouchTime = null;
private Point? _doubleTouchPoint = null;    

private void ScatterViewItem_TouchLeave(object sender, TouchEventArgs e)
    {
        if (!this._doubleHasTimeAndPos)
        {
            this._doubleTouchTime = DateTime.Now.TimeOfDay;
            this._doubleTouchPoint = e.GetTouchPoint(this.scatterView).Position;

            this._doubleHasTimeAndPos = true;
        }
        else
        {
            if (DateTime.Now.TimeOfDay.Subtract(this._doubleTouchTime.Value).TotalMilliseconds <= 500)
            {
                Point touchPoint = e.GetTouchPoint(this.scatterView).Position;

                double xDelta = Math.Abs(this._doubleTouchPoint.Value.X - touchPoint.X);
                double yDelta = Math.Abs(this._doubleTouchPoint.Value.Y - touchPoint.Y);

                if (xDelta <= 16 && yDelta <= 16)
                {
                    // DOUBLE TAP here !
                }
            }

            this._doubleTouchTime = null;
            this._doubleTouchPoint = null;

            this._doubleHasTimeAndPos = false;
        }
    }

Ответы [ 2 ]

0 голосов
/ 03 августа 2011

На уровне API события касания не будут генерировать события двойного щелчка.

Более того, руководящие указания Microsoft по разработке пользовательского интерфейса Surface (заявление об отказе: я помог их написать) на самом деле настоятельно рекомендуют не использовать понятие «двойное нажатие».Touch предназначен для того, чтобы предоставить пользователю более «естественный» способ взаимодействия с технологией без необходимости какого-либо обучения, документирования или запоминания «скрытых» функций.Двойное касание - это не взаимодействие людей в физическом мире и не то, для чего существуют какие-либо визуальные возможности.Следовательно, это не подходит для использования в программных приложениях.Apple согласна с этой философией, кстати - вы не увидите никаких двойных нажатий на iPhone или iPad.

0 голосов
/ 02 августа 2011

Просто предположение из-за отсутствия сенсорной инфраструктуры для тестирования этого кода ...

WPF рекомендует использовать вложенное событие Mouse.MouseDown для любого UIElement, а затем использовать ((MouseButtonEventArgs) e.ClickCount) для проверкидля значения 2 для двойного щелчка.

     <ScatterViewItem Mouse.MouseDown="MouseButtonEventHandler" ... />

А затем

     private void MouseButtonDownHandler(object sender, MouseButtonEventArgs e)
     {
           if (e.ClickCount == 2) 
           {
                  //// Its a double click... should work for touch.
           }
     }

Дайте мне знать, если это работает ....

...