2013-03-17 12 views
5

Ho una tela, con un controllo figlio. I controlli figlio ricevono bene tutti gli eventi PreviewTouchDown e PreviewTouchUp, ma dopo aver abilitato Manipulation (IsManipulationEnabled = true) sul Canvas, solo gli eventi "down" vengono attivati ​​su un oggetto figlio, ma gli eventi TouchUp e PreviewTouchUp non vengono attivati ​​affatto ..WPF TouchUp non attivato quando la manipolazione del genitore è abilitata

Qualche idea cosa sta succedendo qui?

risposta

3

È necessario impostare IsManipulationEnabled su true anche sull'elemento figlio.


La relazione tra eventi di tocco e manipolazione è spiegato in Input Overview/Touch and Manipulation, sezione Il rapporto tra Touch e manipolazione Eventi:

Un UIElement può sempre ricevere gli eventi di tocco. Quando la proprietà IsManipulationEnabled è impostata su true, un UIElement può ricevere eventi sia di tocco che di manipolazione. Se l'evento TouchDown non è gestito (ovvero la proprietà Handled è false), la logica di manipolazione acquisisce il tocco sull'elemento e genera la manipolazione degli eventi . Se la proprietà Handled è impostata su true nell'evento TouchDown, la logica di manipolazione non genera eventi di manipolazione. L'illustrazione seguente di mostra la relazione tra gli eventi di tocco e gli eventi di manipolazione .

Touch e di manipolazione eventi

Touch and manipulation events

+0

Quindi non è possibile ottenerli entrambi? – Jaska

+0

Ho appena trovato un mio codice personale che chiama manualmente 'CaptureTouch' da un gestore di' PreviewTouchDown' che imposta anche 'Handled = true'. E c'è anche un gestore di 'PreviewTouchUp'. Sfortunatamente non posso testarlo adesso, ma ci provo domani. – Clemens

+0

OK, ottimo se puoi farlo ... ma non importa se è troppo fastidioso, dato che ho già scaricato l'intera idea di usare la manipolazione e ho deciso di calcolare me stesso la scala e le rotazioni nel touchmove -event. – Jaska

2

So che è un anno, ma questo potrebbe aiutare qualcuno: Per una soluzione, è possibile acquisire gli eventi "Tap Stylus" bene se il genitore l'elemento ha IsManipulationEnabled = true

.... 

MyChildElement.StylusSystemGesture += MyChildElement_StylusSystemGesture; 

.... 

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

E un anno dopo, hai salvato il mio equilibrio mentale! Infine, sono in grado di rilevare "clic" su un elemento su cui sono attivate le manipolazioni. Un pulsante che racchiude non rileva nemmeno un clic, ma il gesto dello stilo funziona. – ulatekh

Problemi correlati