private void MainItemGrid_OnTap(object sender, GestureEventArgs e) { if (ViewModel.IsWorking) { return; } var frameworkElement = sender as FrameworkElement; if (frameworkElement == null) { return; } var user = frameworkElement.DataContext as TLUserBase; if (user == null) { return; } ViewModel.UserAction(user); var tapedItem = frameworkElement; _tapedItem = tapedItem; VisualTreeExtensions.FindVisualChildWithPredicate <TextBlock>(tapedItem, AnimatedBasePage.GetIsAnimationTarget); if (!(_tapedItem.RenderTransform is CompositeTransform)) { _tapedItem.RenderTransform = new CompositeTransform(); } FrameworkElement tapedItemContainer = _tapedItem.FindParentOfType <ListBoxItem>(); if (tapedItemContainer != null) { tapedItemContainer = tapedItemContainer.FindParentOfType <ContentPresenter>(); } var storyboard = new Storyboard(); var timeline = new DoubleAnimationUsingKeyFrames(); timeline.KeyFrames.Add(new EasingDoubleKeyFrame { KeyTime = TimeSpan.FromSeconds(0.0), Value = 0.0 }); timeline.KeyFrames.Add(new EasingDoubleKeyFrame { KeyTime = TimeSpan.FromSeconds(0.25), Value = 73.0 }); Storyboard.SetTarget(timeline, tapedItem); Storyboard.SetTargetProperty(timeline, new PropertyPath("(UIElement.RenderTransform).(CompositeTransform.TranslateY)")); storyboard.Children.Add(timeline); var timeline2 = new DoubleAnimationUsingKeyFrames(); timeline2.KeyFrames.Add(new EasingDoubleKeyFrame { KeyTime = TimeSpan.FromSeconds(0.0), Value = 0.0 }); timeline2.KeyFrames.Add(new EasingDoubleKeyFrame { KeyTime = TimeSpan.FromSeconds(0.25), Value = 425.0, EasingFunction = new ExponentialEase { EasingMode = EasingMode.EaseIn, Exponent = 5.0 } }); Storyboard.SetTarget(timeline2, tapedItem); Storyboard.SetTargetProperty(timeline2, new PropertyPath("(UIElement.RenderTransform).(CompositeTransform.TranslateX)")); storyboard.Children.Add(timeline2); var timeline3 = new DoubleAnimationUsingKeyFrames(); timeline3.KeyFrames.Add(new EasingDoubleKeyFrame { KeyTime = TimeSpan.FromSeconds(0.0), Value = 1.0 }); timeline3.KeyFrames.Add(new EasingDoubleKeyFrame { KeyTime = TimeSpan.FromSeconds(0.2), Value = 1.0 }); timeline3.KeyFrames.Add(new EasingDoubleKeyFrame { KeyTime = TimeSpan.FromSeconds(0.25), Value = 0.0 }); Storyboard.SetTarget(timeline3, tapedItem); Storyboard.SetTargetProperty(timeline3, new PropertyPath("(UIElement.Opacity)")); storyboard.Children.Add(timeline3); if (tapedItemContainer != null) { var timeline4 = new ObjectAnimationUsingKeyFrames(); timeline4.KeyFrames.Add(new DiscreteObjectKeyFrame { KeyTime = TimeSpan.FromSeconds(0.0), Value = 999.0 }); timeline4.KeyFrames.Add(new DiscreteObjectKeyFrame { KeyTime = TimeSpan.FromSeconds(0.25), Value = 0.0 }); Storyboard.SetTarget(timeline4, tapedItemContainer); Storyboard.SetTargetProperty(timeline4, new PropertyPath("(Canvas.ZIndex)")); storyboard.Children.Add(timeline4); } _lastStoryboard = storyboard; storyboard.Begin(); }