private void DragDropContainer_TouchMove(object sender, TouchEventArgs e, GalaxyAdorner adorner) { var touchPosition = e.GetTouchPoint(DragOverlay); var adornerLocation = new Point(touchPosition.Position.X, touchPosition.Position.Y); adorner.UpdatePosition(adornerLocation); }
private void DragDropContainer_TouchUp(object sender, TouchEventArgs e, GalaxyAdorner adorner, UIElement element) { var touchPosition = e.GetTouchPoint(DragOverlay); Point touchPoint = new Point(touchPosition.Position.X, touchPosition.Position.Y); bool TouchUpIsOverAdorner = touchPoint.X >= adorner.Location.X && touchPoint.X <= adorner.Location.X + adorner.ActualWidth && touchPoint.Y >= adorner.Location.Y && touchPoint.Y <= adorner.Location.Y + adorner.ActualHeight; if (TouchUpIsOverAdorner) { AdornerLayer.GetAdornerLayer(sender as Visual).Remove(adorner); CheckAndExecuteDrop(adorner, touchPoint); } }
private void CheckAndExecuteDrop(GalaxyAdorner adorner, Point touchPoint) { VisualTreeHelper.HitTest(DragOverlay, null, new HitTestResultCallback(MyHitTestResult), new PointHitTestParameters(touchPoint)); foreach (UIElement item in hitResultsList) { if (item is IDroppableArea) { IDroppableArea area = item as IDroppableArea; area.Drop(adorner); } } hitResultsList.Clear(); }
private void ConstructGhostAdornerWithHandlers(Point initialPoint, FrameworkElement adornedElement, TouchEventArgs e) { AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(adornedElement); GalaxyAdorner adorner = new GalaxyAdorner(adornedElement, initialPoint); if (adornerLayer != null && adorner != null) { adornerLayer.Add(adorner); } else { return; } EventHandler <TouchEventArgs> moveHandler = new EventHandler <TouchEventArgs>((s, evt) => DragDropContainer_TouchMove(s, e, adorner)); EventHandler <TouchEventArgs> upHandler = new EventHandler <TouchEventArgs>((s, evt) => DragDropContainer_TouchUp(s, evt, adorner, adornedElement)); EventHandler <TouchEventArgs> unsubscribeHandler = new EventHandler <TouchEventArgs>((s, evt) => DragDropContainer_Unsubscribe(s, e, moveHandler, upHandler, adorner)); adorner.UnsubscribeEvent = unsubscribeHandler; DragOverlay.TouchMove += moveHandler; DragOverlay.TouchUp += upHandler; DragOverlay.TouchUp += unsubscribeHandler; }
private void DragDropContainer_Unsubscribe(object s, TouchEventArgs e, EventHandler <TouchEventArgs> moveHandler, EventHandler <TouchEventArgs> upHandler, GalaxyAdorner adorner) { if (adorner.Parent == null) { DragOverlay.TouchMove -= moveHandler; DragOverlay.TouchUp -= upHandler; DragOverlay.TouchUp -= adorner.UnsubscribeEvent; } }