private void startGrowInAnimation(bool inAndOut, int delay) { if (!_doingAnimation) { _doingAnimation = true; Overlay.IsHitTestVisible = true; ContentHolder.Opacity = 0; //do fade in on overlay ColorAnimation overlayAnimation; overlayAnimation = new ColorAnimation(); overlayAnimation.From = Color.FromArgb(0, 0, 0, 0); overlayAnimation.To = Color.FromArgb(88, 0, 0, 0); overlayAnimation.Duration = new Duration(TimeSpan.FromSeconds(0.5)); Overlay.Background.BeginAnimation(SolidColorBrush.ColorProperty, overlayAnimation); //do grow in animation ScaleTransform scale = new ScaleTransform(1.0, 1.0); Card.RenderTransformOrigin = new Point(0.5, 0.5); Card.RenderTransform = scale; DoubleAnimation growXAnimation = new DoubleAnimation(); growXAnimation.Duration = new Duration(TimeSpan.FromSeconds(0.5)); growXAnimation.From = 0; growXAnimation.To = 1; growXAnimation.EasingFunction = new CubicEase { EasingMode = EasingMode.EaseOut }; Card.RenderTransform.BeginAnimation(ScaleTransform.ScaleXProperty, growXAnimation); DoubleAnimation growYAnimation = new DoubleAnimation(); growYAnimation.Duration = new Duration(TimeSpan.FromSeconds(0.5)); growYAnimation.From = 0; growYAnimation.To = 1; growYAnimation.EasingFunction = new CubicEase { EasingMode = EasingMode.EaseOut }; growYAnimation.Completed += delegate { _doingAnimation = false; if (inAndOut) { startGrowOutAnimation(delay); } }; Card.RenderTransform.BeginAnimation(ScaleTransform.ScaleYProperty, growYAnimation); //do fade in on content DoubleAnimation fadeIn = new DoubleAnimation { From = 0, To = 1, BeginTime = TimeSpan.FromSeconds(0.2), Duration = new Duration(TimeSpan.FromSeconds(0.3)) }; ContentHolder.BeginAnimation(UIElement.OpacityProperty, fadeIn); } }