protected override void OnManipulationDelta(System.Windows.Input.ManipulationDeltaEventArgs e)
        {
            Rectangle rectToMove  = e.OriginalSource as Rectangle;
            Matrix    rectsMatrix = ((MatrixTransform)rectToMove.RenderTransform).Matrix;

            rectsMatrix.RotateAt(e.DeltaManipulation.Rotation,
                                 e.ManipulationOrigin.X,
                                 e.ManipulationOrigin.Y);

            rectsMatrix.ScaleAt(e.DeltaManipulation.Scale.X,
                                e.DeltaManipulation.Scale.X,
                                e.ManipulationOrigin.X,
                                e.ManipulationOrigin.Y);

            rectsMatrix.Translate(e.DeltaManipulation.Translation.X,
                                  e.DeltaManipulation.Translation.Y);

            rectToMove.RenderTransform = new MatrixTransform(rectsMatrix);

            Rect containingRect =
                new Rect(((FrameworkElement)e.ManipulationContainer).RenderSize);

            Rect shapeBounds =
                rectToMove.RenderTransform.TransformBounds(
                    new Rect(rectToMove.RenderSize));

            if (e.IsInertial && !containingRect.Contains(shapeBounds))
            {
                e.Complete();
            }

            e.Handled = true;
            //base.OnManipulationDelta(e);
        }
        void winControl_ManipulationDelta(object sender, System.Windows.Input.ManipulationDeltaEventArgs e)
        {
            // Left to Right:   +X
            // Right to Left:   -X
            // Top to Bottom:   +Y
            // Bottom to Top:   -Y

            // get the movement both directionally and absolute val
            var delX = e.CumulativeManipulation.Translation.X;
            var absX = Math.Abs(delX);
            var delY = e.CumulativeManipulation.Translation.Y;
            var absY = Math.Abs(delY);

            // calculate how much change will trigger an action based on the control's size
            var upDownMinDelta    = this.ActualHeight * deltaPercentage;
            var leftRightMinDelta = this.ActualWidth * deltaPercentage;

            //System.Diagnostics.Debug.WriteLine("X: {0}, Y: {1}", delX, delY);

            if (absX > absY && absX > leftRightMinDelta)
            {
                if (delX < 0)
                {
                    this.Element.OnSwipeLeft();
                }
                else
                {
                    this.Element.OnSwipeRight();
                }
                e.Complete();
            }
            else if (absY > absX && absY > upDownMinDelta)
            {
                if (delY < 0)
                {
                    this.Element.OnSwipeUp();
                }
                else
                {
                    this.Element.OnSwipeDown();
                }
                e.Complete();
            }
        }