public TouchEvents(TouchEventsTrigger t) { t.TouchDown = e => { if (TouchDown != null) { TouchDown(e); } }; t.TouchMove = e => { if (TouchMove != null) { TouchMove(e); } }; t.TouchUp = e => { if (TouchUp != null) { TouchUp(e); } }; }
public ToTouchEvents(UIElement that, Func <TouchEvents, T> NextTouchContext) { var s = new Stack <TouchEventsTriggerTuple>(); var x = new Dictionary <int, TouchEventsTriggerTuple>(); Func <TouchEventsTriggerTuple> Pop = delegate { if (s.Count > 0) { return(s.Pop()); } var tet = new TouchEventsTrigger(); var te = new TouchEvents(tet); var n = NextTouchContext(te); this.Touches.Add(n); return(new TouchEventsTriggerTuple { Touch = n, Trigger = tet }); }; that.TouchDown += (k, e) => { var id = e.TouchDevice.Id; if (x.ContainsKey(id)) { return; } var m = Pop(); x[id] = m; if (this.TouchDown != null) { this.TouchDown(m.Touch, e); } e.Handled = true; m.Trigger.TouchDown(e); }; that.TouchMove += (k, e) => { var id = e.TouchDevice.Id; if (!x.ContainsKey(id)) { var m = Pop(); x[id] = m; if (this.TouchDown != null) { this.TouchDown(m.Touch, e); } m.Trigger.TouchDown(e); } { var m = x[id]; if (this.TouchMove != null) { this.TouchMove(m.Touch, e); } e.Handled = true; m.Trigger.TouchMove(e); } }; that.TouchUp += (k, e) => { var id = e.TouchDevice.Id; if (!x.ContainsKey(id)) { return; } { var m = x[id]; s.Push(m); x.Remove(id); if (this.TouchUp != null) { this.TouchUp(m.Touch, e); } m.Trigger.TouchUp(e); } }; }