private void OnManipulationComplete(object sender, ManipulationCompletedRoutedEventArgs e)
        {
            if (!_xfElement.IsVisible || FrameworkElement == null)
            {
                return;
            }

            DebugMethodName(2);
            DebugMessage("Element=[" + _xfElement + "]");
            PointerDeviceTypeDebugMessage(e.PointerDeviceType);
            PositionDebugMessage(e.Position);
            ManipulationDeltaDebugMessage(e.Cumulative, "Cumul");
            VelocitiesDebugString(e.Velocities);
            DebugMessage("IsIntertial=[" + e.IsInertial + "]");
            ContainerDebugMessage(e.Container);
            HandledDebugString(e.Handled);

            foreach (var listener in _listeners)
            {
                if (_panning && listener.HandlesPanning)
                {
                    var args = new UwpPanEventArgs(FrameworkElement, e);
                    args.Listener = listener;
                    listener?.OnPanned(args);
                    e.Handled |= args.Handled;
                    DebugMessage("Panned tHandled=[" + e.Handled + "]");
                }
                if (_pinching && listener.HandlesPinching)
                {
                    var args = new UwpPinchEventArgs(FrameworkElement, e);
                    args.Listener = listener;
                    listener?.OnPinched(args);
                    e.Handled |= args.Handled;
                    DebugMessage("Pinched Handled=[" + e.Handled + "]");
                }
                if (_rotating && listener.HandlesRotating)
                {
                    var args = new UwpRotateEventArgs(FrameworkElement, e);
                    args.Listener = listener;
                    listener?.OnRotated(args);
                    e.Handled |= args.Handled;
                    DebugMessage("Rotated Handled=[" + e.Handled + "]");
                }

                DebugMessage("Handled=[" + e.Handled + "] Element=[" + _xfElement + "]");
                if (e.Handled)
                {
                    break;
                }
            }

            _panning      = false;
            _pinching     = false;
            _rotating     = false;
            _longPressing = false;
        }
        private void OnManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
        {
            //System.Diagnostics.Debug.WriteLine(P42.Utils.ReflectionExtensions.CallerMemberName() +"("+sender+", [d:{"+e.Delta.Translation.X+","+e.Delta.Translation.Y+"} c:{"+e.Cumulative.Translation.Y+","+e.Cumulative.Translation.Y+"}])");

            _longPressing = false;
            _holdTimer?.Stop();
            _holdTimer = null;

            if (!_xfElement.IsVisible || FrameworkElement == null)
            {
                return;
            }

            if (!_panning && (Math.Abs(e.Cumulative.Translation.X) > 0 || Math.Abs(e.Cumulative.Translation.Y) > 0))
            {
                _panning = true;
            }
            if (!_pinching && Math.Abs(e.Cumulative.Scale - 1) > 0)
            {
                _pinching = true;
            }
            if (!_rotating && Math.Abs(e.Cumulative.Rotation) > 0)
            {
                _rotating = true;
            }

            DebugMethodName(2);
            DebugMessage("Element=[" + _xfElement + "]");
            PointerDeviceTypeDebugMessage(e.PointerDeviceType);
            PositionDebugMessage(e.Position);
            ManipulationDeltaDebugMessage(e.Delta, "Delta");
            ManipulationDeltaDebugMessage(e.Cumulative, "Cumul");
            VelocitiesDebugString(e.Velocities);
            DebugMessage("IsIntertial=[" + e.IsInertial + "]");
            ContainerDebugMessage(e.Container);
            HandledDebugString(e.Handled);

            foreach (var listener in _listeners)
            {
                if (_panning && listener.HandlesPanning)
                {
                    var args = new UwpPanEventArgs(FrameworkElement, e)
                    {
                        Listener = listener
                    };
                    listener?.OnPanning(args);
                    e.Handled = e.Handled || args.Handled;
                    DebugMessage("Panning Handled=[" + e.Handled + "]");
                }
                if (_pinching && listener.HandlesPinching)
                {
                    var args = new UwpPinchEventArgs(FrameworkElement, e)
                    {
                        Listener = listener
                    };
                    listener?.OnPinching(args);
                    e.Handled = e.Handled || args.Handled;
                    DebugMessage("Pinching Handled=[" + e.Handled + "]");
                }
                if (_rotating && listener.HandlesRotating)
                {
                    var args = new UwpRotateEventArgs(FrameworkElement, e)
                    {
                        Listener = listener
                    };
                    listener?.OnRotating(args);
                    e.Handled = e.Handled || args.Handled;
                    DebugMessage("Rotating Handled=[" + e.Handled + "]");
                }
                if (e.Handled)
                {
                    break;
                }
            }
            HandledDebugString(e.Handled);
        }