Inheritance: System.Windows.DependencyObject
        protected override Size ArrangeOverride(Size arrangeSize)
        {
            arrangeSize = base.ArrangeOverride(arrangeSize);

            foreach (var child in this.InternalChildren.OfType <FrameworkElement>())
            {
                var oldOffset = GetOffset(child);
                var newOffset = VisualTreeHelper.GetOffset(child);
                if (EqualityComparer <Vector> .Default.Equals(oldOffset, new Vector(Double.NaN, Double.NaN)))
                {
                    AnimationManager.StartEntryAnimation(child);
                }
                else if (oldOffset != newOffset)
                {
                    AnimationManager.StartRepositionAnimation(child, newOffset - oldOffset);
                }

                SetOffset(child, newOffset);
            }

            return(arrangeSize);
        }
        private async void DemoWindow_Loaded(object sender, RoutedEventArgs e)
        {
            SizeToContent = System.Windows.SizeToContent.Manual;
            await GifRecorderManager.Instance.CurrentStoryboardsCompleted();

            _viewModel.Collection.Clear();

            var originalTitle = Title;

            Title = "Recording...";

            using (GifRecorderManager.Instance.StartRecording(this, Root, "basic_projection.gif", 10))
            {
                foreach (var item in new[] { 1, 2, 3, 4, 5, 6, 7, 8 })
                {
                    _viewModel.Collection.Add(item);
                }

                AnimationManager.StartEntryAnimation(SourceLabel);

                await GifRecorderManager.Instance.CurrentStoryboardsCompleted();

                AnimationManager.StartEntryAnimation(TargetLabel);
                AnimationManager.StartEntryAnimation(Label1);
                _viewModel.SelectedOption = _viewModel.DataOptions[6];

                await GifRecorderManager.Instance.CurrentStoryboardsCompleted();

                //await AnimationManager.Pause(1000);

                System.Diagnostics.Debug.WriteLine("Removing");
                AnimationManager.StartExitAnimation(Label1);
                AnimationManager.StartEntryAnimation(Label2);
                _viewModel.Collection.RemoveAt(3);

                await GifRecorderManager.Instance.CurrentStoryboardsCompleted();

                //await AnimationManager.Pause(1000);

                AnimationManager.StartExitAnimation(Label2);
                AnimationManager.StartEntryAnimation(Label3);
                _viewModel.Collection.Insert(0, 4);

                await GifRecorderManager.Instance.CurrentStoryboardsCompleted();

                // await AnimationManager.Pause(1000);

                AnimationManager.StartExitAnimation(Label3);
                AnimationManager.StartEntryAnimation(Label4);
                _viewModel.Collection.Move(0, 3);

                await GifRecorderManager.Instance.CurrentStoryboardsCompleted();

                //await AnimationManager.Pause(1000);

                AnimationManager.StartExitAnimation(Root, 10, -5);

                await GifRecorderManager.Instance.CurrentStoryboardsCompleted();
            }

            Close();
        }