2012-01-15 8 views
6

Per lo scenario di base descritto in the msdn overview (under Touch and Manipulation), TouchEnter e TouchLeave vengono attivati ​​rispettivamente per ogni TouchDown e TouchUp corrispondente. A differenza del mouse, il touch e lo stilo non sono vincolati per mantenere il contatto con lo schermo.Strategia per differenziare TouchUp da TouchLeave e TouchDown da TouchEnter?

C'è un modo per utilizzare TouchEnter e TouchLeave è di acquisire solo quando un dito è trascinato in UIElement. Poiché questi eventi vengono attivati ​​per ogni touchUp e touchDown, qual è il modo migliore per differenziare questi eventi?

Una strategia che potrebbe funzionare per il caso singolo, consiste nell'avere un flag impostato su TouchDown e verificare se il flag è impostato su Ritocco. Ciò consente alcune verifiche di condizione su Ritocco. Tuttavia, per più dita, non è fattibile.

Non ci sono eventi PreviewTouchEnter e PreviewTouchLeave attivati, solo PreviewTouchDown e PreviewTouchUp. La sequenza di eventi per un dito abbassato su un UIElement e poi sollevato sopra è il seguente:

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

Questa sequenza non aiuta a differenziare un Touc hInserire ciò che è accaduto a causa di un dito trascinato sullo schermo in UIElement, da un dito che si abbassa direttamente su UIElement. Mi manca qualcosa, o la struttura non supporta tale differenziazione stessa?

risposta

0

È possibile utilizzare la classe TouchDevice per tenere traccia di dove vengono generati i tocchi. Ai nuovi tocchi viene assegnato un nuovo ID, in modo da poter distinguere tra tocchi esistenti e nuovi e quali elementi catturano il dispositivo. Immagino che aggiri gli eventi di Manipolazione e i normali processi, ma spero che aiuti.

0

Se si recupera un TouchPoint per l'evento, c'è una proprietà su di esso chiamato Action che ti dice se si tratta di un Down, un Move o di 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. 
    } 
} 
Problemi correlati