public void AddTouchMoveHandler(Xamarin.Forms.VisualElement xamarinVisual, EventHandler <TouchEventArgs> handler)
        {
            IVisualElementRenderer renderer = Platform.GetRenderer(xamarinVisual);
            Panel panel = renderer as Panel;

            panel.PointerMoved += this.Panel_PointerMoved;

            TouchEventsHelper helper = GetOrCreateTouchEventsHelper(panel);

            helper.touchMoveHandlers.Add(handler);
        }
        private void Panel_PointerMoved(object sender, PointerRoutedEventArgs e)
        {
            UIElement         uiElement = (UIElement)sender;
            PointerPoint      pointer   = e.GetCurrentPoint(uiElement);
            TouchEventsHelper helper    = GetOrCreateTouchEventsHelper(uiElement);
            TouchEventArgs    args      = new TouchEventArgs(new Xamarin.Forms.Point(pointer.Position.X, pointer.Position.Y));

            foreach (var handler in helper.touchMoveHandlers)
            {
                handler(null, args);
            }
        }
        private static TouchEventsHelper GetOrCreateTouchEventsHelper(DependencyObject obj)
        {
            TouchEventsHelper helper = (TouchEventsHelper)obj.GetValue(TouchEventsHelperProperty);

            if (helper == null)
            {
                helper = new TouchEventsHelper();
                obj.SetValue(TouchEventsHelperProperty, helper);
            }

            return(helper);
        }