void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            Loaded -= MainPage_Loaded;

            CompositionTarget.Rendering += _Render;

            Items = new List <RoundedSquare>();
            for (var i = 0; i < 25; i++)
            {
                var item = new RoundedSquare
                {
                    CacheMode = new BitmapCache(),
                    Width     = 80,
                    Height    = 80
                };

                item.NormalizeTransformGroup();
                item.RenderTransformOrigin = new Point(.5, .5);
                item.MouseLeftButtonDown  += ItemMouseLeftButtonDown;

                Items.Add(item);
                canvas.Children.Add(item);
            }

            // Hide the options
            stackOptions.AutoAlphaCollapsedTo(0);
            gridOptions.AutoAlphaCollapsedTo(0);
            pileOptions.AutoAlphaCollapsedTo(0);

            SetView(Views.Pile);
        }
        private void PileNav(RoundedSquare selectedItem)
        {
            var selectedProjection = selectedItem.Projection as PlaneProjection;
            var selectedPos        = selectedItem.Position;

            if (selectedProjection == null)
            {
                return;
            }


            foreach (var item in Items)
            {
                var currentProjection = Helper.Copy(item.Projection as PlaneProjection);
                currentProjection.LocalOffsetZ -= selectedProjection.LocalOffsetZ;
                currentProjection.LocalOffsetX -= selectedProjection.LocalOffsetX;
                currentProjection.LocalOffsetY -= selectedProjection.LocalOffsetY;

                var newPos = new Point(item.Position.X - selectedPos.X + CenterX, item.Position.Y - selectedPos.Y + CenterY);

                ArtefactAnimator.AddEase(item, RoundedSquare.PositionProperty, newPos, .6, AnimationTransitions.CubicEaseOut, 0);
                ArtefactAnimator.AddEase(item, ProjectionProperty, currentProjection, 1, AnimationTransitions.CubicEaseIn, 0).Update += (eo, p) =>
                {
                    var target = (FrameworkElement)eo.Target;
                    var pp     = target.Projection as PlaneProjection;

                    // set blur based on z-depth
                    if (pp == null)
                    {
                        return;
                    }

                    target.Effect = new BlurEffect {
                        Radius = -pp.LocalOffsetZ / 50
                    };
                    target.Opacity = pp.LocalOffsetZ < 200 ? 1 : 1 - (Math.Min(pp.LocalOffsetZ - 200, 500) / 500);
                };
            }
        }