2012-01-15 6 views
6

Para el escenario básico descrito in the msdn overview (under Touch and Manipulation) TouchEnter y TouchLeave se activan para cada TouchDown y TouchUp correspondientes, respectivamente. A diferencia del mouse, Touch y Stylus no están obligados a mantener el contacto con la pantalla.Estrategia para diferenciar TouchUp de TouchLeave y TouchDown de TouchEnter?

Hay una manera de usar TouchEnter y TouchLeave es capturar solo cuando un dedo está arrastrado dentro del UIElement. A medida que estos eventos se disparan para cada touchUp y touchdown, ¿cuál es la mejor forma de diferenciar estos eventos?

Una estrategia que funcionaría para el caso de un solo dedo, es tener un indicador configurado en TouchDown, y verificar si el indicador está configurado en TouchUp. Esto permite algunas comprobaciones de condición en TouchUp. Sin embargo, para múltiples dedos, no es factible.

No hay eventos PreviewTouchEnter y PreviewTouchLeave activados, solo PreviewTouchDown y PreviewTouchUp. La secuencia de eventos para un dedo rebajado a un UIElement y luego levantado sobre ella es como sigue:

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

Esta secuencia no ayuda a diferenciar un Touc hIntroduzca lo que sucedió debido a que un dedo se arrastró por la pantalla hacia el UIElement, desde un dedo que se baja directamente al UIElement. ¿Me estoy perdiendo algo, o el marco no admite tal diferenciación?

Respuesta

0

Puede usar la clase TouchDevice para realizar un seguimiento de dónde se generan los toques. Los nuevos toques reciben una nueva ID, por lo que puede distinguir entre toques existentes y nuevos, y qué elementos capturan el dispositivo. Supongo que eso evita los eventos de Manipulación y los procesos normales, pero espero que eso ayude.

0

Si se recupera un TouchPoint para el evento, hay una propiedad en él nombró Action la que le indica si se trata de un Down, un Move o un evento 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. 
    } 
} 
Cuestiones relacionadas