2013-03-17 9 views
5

Mam płótno z jednym dzieckiem. Kontrolki podrzędne odbierają wszystkie zdarzenia PreviewTouchDown i PreviewTouchUp - ale po włączeniu opcji Manipulacja (IsManipulationEnabled = true) w obszarze Canvas tylko zdarzenia "w dół" są uruchamiane na obiekcie podrzędnym, ale zdarzenia TouchUp i PreviewTouchUp nie są uruchamiane w ogóle.WPF TouchUp nie uruchamia się, gdy włączona jest nadrzędna manipulacja.

Jakieś pomysły, co się tutaj dzieje?

Odpowiedz

3

Należy również ustawić IsManipulationEnabled na true na elemencie podrzędnym.


Zależność między dotykowych i manipulacji wydarzeń wyjaśniono w Input Overview/Touch and Manipulation sekcja Zależność między dotykowe i manipulacji Wydarzenia:

UIElement zawsze może odbierać zdarzenia dotykowe. Gdy właściwość IsManipulationEnabled jest ustawiona na wartość true, jednostka UIElement może odbierać zarówno zdarzenia dotykowe, jak i manipulacyjne. Jeśli zdarzenie TouchDown nie jest obsługiwane (tzn. Właściwość Handled ma wartość false), logika manipulacji przechwytuje dotyk elementu i generuje zdarzenia manipulacji. Jeśli właściwość Handled ma wartość true w zdarzeniu TouchDown, , logika manipulacji nie generuje zdarzeń manipulacji. Poniższa ilustracja przedstawia zależność między zdarzeniami dotykowymi a zdarzeniami manipulacyjnymi .

dotykowe i manipulacji imprezy

Touch and manipulation events

+0

Więc nie ma opcji, aby je zdobyć? – Jaska

+0

Po prostu znalazłem swój własny kod, w którym ręcznie wołam 'CaptureTouch' z' PreviewTouchDown' handler, który ustawia również 'Handled = true'. Istnieje również handler 'PreviewTouchUp'. Niestety nie mogę go teraz przetestować, ale spróbuję jutro. – Clemens

+0

OK, Świetnie, jeśli możesz to zrobić ... ale nie przejmuj się, jeśli to zbyt kłopotliwe, bo już porzuciłem cały pomysł użycia manipulacji i zdecydowałem się obliczyć skalę i obroty w touchmove -Event. – Jaska

2

znam jej rok życia, ale może to komuś pomóc: Aby obejść ten problem, można uchwycić „Stylus kran” zdarzeń w porządku jeśli rodzic element IsManipulationEnabled = true

.... 

MyChildElement.StylusSystemGesture += MyChildElement_StylusSystemGesture; 

.... 

void MyChildElement_StylusSystemGesture(object sender, StylusSystemGestureEventArgs e) 
    { 
     if (e.SystemGesture == SystemGesture.Tap) 
      //Do something 
    } 
+0

A rok później uratowałeś moje zdrowie psychiczne! Na koniec mogę wykryć "kliknięcia" elementu, który ma włączone manipulacje. Przycisk zamykający nie wykryłby nawet kliknięcia, ale gest pisaka działa. – ulatekh

Powiązane problemy