MouseDoubleClick & Touch на ScatterViewItem

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

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

ОБНОВЛЕНИЕ:

Наконец, я написал этот код для воспроизведения простого двойного касания с событием TouchLeave на ограниченном прямоугольнике (ширина и высота 16 пикселей) и 500 мс в течение требуемого времени между двумя событиями 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 ответа

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

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

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

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

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

Другие вопросы по тегам