Esempio n. 1
0
        void ProcessExpandAnimation()
        {
            if (StartTime == null)
            {
                return;
            }
            var startTime = StartTime.Value;

            var elapsedTime = DateTime.Now.Subtract(startTime);

            if (elapsedTime < TimeSpan.Zero)
            {
                return;
            }

            var totalDuration = Duration;

            if (elapsedTime < totalDuration && this.IsVisible)
            {
                var normalizedTime = (Double)elapsedTime.Ticks / (Double)totalDuration.Ticks;
                var easing         =
                    (EasingFunction == null ?
                     normalizedTime    // if there is no easing function, use linear animation.
                        :
                     EasingFunction.Ease(normalizedTime));

                if (InitialSize != null && FinalSize != null)
                {
                    var currentWidth  = InitialSize.Value.Width + ((FinalSize.Value.Width - InitialSize.Value.Width) * easing);
                    var currentHeight = InitialSize.Value.Height + ((FinalSize.Value.Height - InitialSize.Value.Height) * easing);

                    CurrentSize = new Size(currentWidth, currentHeight);
                }

                if (InitialVerticalOffset != null && FinalVerticalOffset != null)
                {
                    var currentVerticalOffset = InitialVerticalOffset.Value + ((FinalVerticalOffset.Value - InitialVerticalOffset.Value) * easing);
                    ParentScrollViewer.ScrollToVerticalOffset(currentVerticalOffset);
                }
            }
            else
            {
                CurrentSize = FinalSize.Value;
                if (ParentScrollViewer != null && FinalVerticalOffset != null)
                {
                    ParentScrollViewer.ScrollToVerticalOffset(FinalVerticalOffset.Value);
                    InitialVerticalOffset = null;
                    FinalVerticalOffset   = null;
                }
                StartTime   = null;
                InitialSize = null;
                FinalSize   = null;
            }
        }