public void UpdateCardLayoutAsync(double animationDuration = Double.MaxValue, bool rotate = false)
        {
            if (animationDuration == Double.MaxValue)
            {
                animationDuration = 50;
            }

            if (this.Items.Count == 0)
            {
                return;
            }

            int prevZIndex = Canvas.GetZIndex(this.Items[0]);

            for (int i = 0; i < this.Items.Count; i++)
            {
                CardView         card = this.Items[i];
                GeneralTransform gt   = this.TransformToVisual(card);
                Point            ptTo = gt.TransformPoint(this.GetCardTopLeft(i));
                card.AnimationPosition = ptTo;
                card.AnimateToAsync(ptTo, rotate, animationDuration);
                if (_layout == CardLayout.PlayedOverlapped)
                {
                    Canvas.SetZIndex(card, prevZIndex++);
                }
            }
        }
        public void MoveCardToTargetAsync(CardView card, CardContainer target, double animationDuration = Double.MaxValue, bool rotate = false, bool transferCard = true)
        {
            if (animationDuration == Double.MaxValue)
            {
                animationDuration = MainPage.AnimationSpeeds.Medium;
            }
            Point ptTo = SetupCardForMove(card, target, rotate, transferCard);

            card.AnimateToAsync(ptTo, rotate, animationDuration);
            if (transferCard)
            {
                this.UpdateCardLayoutAsync();
            }
        }