Стратегия для разграничения TouchUp от TouchLeave и TouchDown от TouchEnter? - PullRequest
6 голосов
/ 16 января 2012

Для базового сценария, описанного в обзоре msdn (в разделе «Сенсорное управление») TouchEnter и TouchLeave запускаются для каждого соответствующего TouchDown и TouchUp соответственно.В отличие от мыши, Touch и Stylus не обязаны поддерживать контакт с экраном.

Есть ли способ использовать TouchEnter и TouchLeave для захвата только тогда, когда палец перетащил в UIElement.Поскольку эти события запускаются для каждого TouchUp и TouchDown, каков лучший способ дифференцировать эти события?

Одна стратегия, которая будет работать для случая с одним пальцем, - это установить флаг на TouchDown и проверить, установлен ли флаг на TouchUp.Это позволяет некоторые проверки состояния на TouchUp.Однако для нескольких пальцев это невозможно.

Нет событий PreviewTouchEnter и PreviewTouchLeave, только PreviewTouchDown и PreviewTouchUp.Последовательность событий для пальца, опущенного на элемент UIElement и затем поднятого над ним, выглядит следующим образом:

  1. TouchEnter
  2. PreviewTouchDown
  3. TouchDown
  4. PreviewTouchUp
  5. TouchUp
  6. TouchLeave

Эта последовательность не помогает дифференцировать TouchEnter, который произошел из-за перетаскивания пальцем по экрану в элемент UIElement, изпалец, который опускается на UIElement напрямую.Я что-то упустил или фреймворк сам не поддерживает такую ​​дифференциацию?

Ответы [ 2 ]

0 голосов
/ 25 апреля 2014

Если вы извлекаете TouchPoint для события, на нем есть свойство с именем Action, которое сообщает вам, является ли это Down, Move или Up событием.

void m_element_TouchEnter(object sender, System.Windows.Input.TouchEventArgs e)
{
    var touchPoint = e.GetTouchPoint(m_someElement);

    if (touchPoint.Action == System.Windows.Input.TouchAction.Move)
    {
        //This is a "true" TouchEnter event
    }
    else if (touchPoint.Action == System.Windows.Input.TouchAction.Down)
    {
        //This is a "true" TouchDown event.
    }
}
0 голосов
/ 17 апреля 2013

Можете ли вы использовать класс TouchDevice , чтобы отслеживать, где генерируются прикосновения.Новые штрихи получают новый идентификатор, чтобы вы могли различать существующие и новые штрихи, а также то, какие элементы захватывают устройство.Я предполагаю, что это обходит события Манипуляции и нормальные процессы, но я надеюсь, что это помогает.

...