2012-01-15 6 views
6

Dla podstawowego scenariusza opisanego poniżej: in the msdn overview (under Touch and Manipulation) TouchEnter i TouchLeave są uruchamiane odpowiednio dla każdego odpowiadającego TouchDown i TouchUp. W przeciwieństwie do myszy, Touch i Stylus nie są ograniczone, aby utrzymać kontakt z ekranem.Strategia różnicowania TouchUp od TouchLeave i TouchDown od TouchEnter?

Czy istnieje sposób użycia TouchEnter i TouchLeave jest przechwytywanie tylko wtedy, gdy palec jest przeciągnięty do UIElement. W związku z tym, że te zdarzenia są uruchamiane dla każdego touchUp i touchdown, jaki jest najlepszy sposób na rozróżnienie tych wydarzeń?

Jedną ze strategii, która zadziała w przypadku pojedynczego palca, jest ustawienie flagi na TouchDown i sprawdzenie, czy flaga jest ustawiona na TouchUp. Pozwala to na pewne kontrole stanu na TouchUp. Jednak w przypadku wielu palców nie jest to wykonalne.

Brak zdarzeń PreviewTouchEnter i PreviewTouchLeave, tylko PreviewTouchDown i PreviewTouchUp. Kolejność zdarzeń dla palca zmalała do UIElement a następnie podniesione przez się następująco:

  1. TouchEnter
  2. PreviewTouchDown
  3. Przyłożeń
  4. PreviewTouchUp
  5. Touchup
  6. TouchLeave

Ta sekwencja nie pomaga odróżnić Touca hWprowadź to, co się stało z powodu przeciągnięcia palcem po ekranie do UIElement, od palca, który jest obniżany bezpośrednio do UIElement. Czy czegoś brakuje, czy też ramy nie wspierają takiego różnicowania?

Odpowiedz

0

Czy możesz użyć klasy TouchDevice, aby śledzić miejsca, w których są dotykane. Nowe dotknięcia otrzymują nowy identyfikator, dzięki czemu można rozróżnić istniejące i nowe elementy oraz elementy przechwytywane przez urządzenie. Sądzę, że to obchodzi wydarzenia Manipulacji i normalne procesy, ale mam nadzieję, że to pomaga.

0

Jeśli pobrać TouchPoint na razie nie ma na to właściwość o nazwie Action który powie Ci, czy jest to Down, A Move lub zdarzenie 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. 
    } 
} 
Powiązane problemy