private Storyboard CreatePeelAnimationStoryboard(int playerViewModelIndex, TileAnimationDirection direction, out Grid tile) { // // Initialize the tile grid. // tile = new Grid() { Width = 50, Height = 50, Background = new SolidColorBrush(Colors.DodgerBlue) }; tile.VerticalAlignment = VerticalAlignment.Top; tile.HorizontalAlignment = HorizontalAlignment.Left; tile.SetValue(Grid.ColumnProperty, 0); RootGrid.Children.Add(tile); tile.RenderTransformOrigin = new Point(.5, .5); tile.RenderTransform = new CompositeTransform(); var storyboard = new Storyboard(); storyboard.Children.Add(CreateScaleXKeyFrames()); storyboard.Children.Add(CreateScaleYKeyFrames()); storyboard.Children.Add(CreateTranslationKeyFrames(playerViewModelIndex, direction, tile)); storyboard.Children.Add(CreateOpacityKeyFrames()); return storyboard; }
private DoubleAnimationUsingKeyFrames CreateTranslationKeyFrames(int playerViewModelIndex, TileAnimationDirection direction, Grid tile, int delay = 0) { Point BeginPoint; Point EndPoint; var animation = new DoubleAnimationUsingKeyFrames(); Storyboard.SetTargetProperty(animation, "(UIElement.RenderTransform).(CompositeTransform.TranslateY)"); var dumpCircleGt = InnerDumpCircle.TransformToVisual(pageRoot); var animationTargetContainer = PlayerPanel.ItemContainerGenerator.ContainerFromIndex(playerViewModelIndex); var grid = VisualTreeHelper.GetChild(animationTargetContainer, 0) as Grid; var playerViewModelGt = grid.TransformToVisual(pageRoot); if (direction == TileAnimationDirection.Down) { BeginPoint = dumpCircleGt.TransformPoint(new Point(0, 0)); EndPoint = playerViewModelGt.TransformPoint(new Point(0, 0)); tile.Margin = new Thickness(BeginPoint.X + InnerDumpCircle.Width / 2 - tile.Width / 2, BeginPoint.Y - tile.Height / 2 + 10/* + InnerDumpCircle.Height / 2*/, 0, 0); } else { EndPoint = dumpCircleGt.TransformPoint(new Point(0, 0)); BeginPoint = playerViewModelGt.TransformPoint(new Point(0, 0)); tile.Margin = new Thickness(BeginPoint.X + InnerDumpCircle.Width / 2 + 15, tile.Height / 2 + 10, 0, 0); } var acFrame = new EasingDoubleKeyFrame(); acFrame.KeyTime = new KeyTime(); acFrame.KeyTime = TimeSpan.FromMilliseconds(0); acFrame.Value = BeginPoint.Y; var bcFrame = new EasingDoubleKeyFrame(); bcFrame.KeyTime = new KeyTime(); bcFrame.KeyTime = TimeSpan.FromMilliseconds(0 + delay); bcFrame.Value = BeginPoint.Y; var cFrame = new EasingDoubleKeyFrame(); cFrame.KeyTime = new KeyTime(); cFrame.KeyTime = TimeSpan.FromMilliseconds(100 + delay); cFrame.Value = BeginPoint.Y; var dFrame = new EasingDoubleKeyFrame(); dFrame.KeyTime = new KeyTime(); dFrame.KeyTime = TimeSpan.FromMilliseconds(500 + delay); dFrame.Value = EndPoint.Y; dFrame.EasingFunction = new QuadraticEase(); dFrame.EasingFunction.EasingMode = EasingMode.EaseInOut; animation.KeyFrames.Add(acFrame); animation.KeyFrames.Add(bcFrame); animation.KeyFrames.Add(cFrame); animation.KeyFrames.Add(dFrame); return animation; }