Анимация затухания тени с помощью раскадровки

#c# #wpf #animation #storyboard #dropshadow

#c# #wpf #Анимация #раскадровка #выпадающая тень

Вопрос:

Я бы хотел, чтобы эффект затенения в сетке данных исчезал в течение 2 секунд, который снова исчезает в течение 2 секунд после завершения анимации затухания.

Мой код пока:

 DropShadowEffect dropShadowEffect = new DropShadowEffect();
dropShadowEffect.ShadowDepth = 0;
dropShadowEffect.Color = Colors.LightSeaGreen;
dropShadowEffect.Opacity = 0;
dropShadowEffect.BlurRadius = 20;
element.Effect = dropShadowEffect;

Storyboard storyboard1 = new Storyboard();
TimeSpan duration1 = TimeSpan.FromMilliseconds(2000);

DoubleAnimation animateOpacity1 = new DoubleAnimation() { From = 0, To = 1, Duration = new Duration(duration1) };
Storyboard.SetTargetName(animateOpacity1, element.Name);
Storyboard.SetTargetProperty(animateOpacity1, new PropertyPath(DropShadowEffect.OpacityProperty));

DoubleAnimation animateOpacity2 = new DoubleAnimation() { From = 1, To = 0, Duration = new Duration(duration1) };
Storyboard.SetTargetName(animateOpacity2, element.Name);
Storyboard.SetTargetProperty(animateOpacity2, new PropertyPath(DropShadowEffect.OpacityProperty));

storyboard1.Children.Add(animateOpacity1);
storyboard1.Children.Add(animateOpacity2);

storyboard1.Begin(element);
  

После выполнения кода ничего не происходит.

Ответ №1:

Если вы просто хотите выполнить DoubleAnimation, не нужно усложнять это с помощью StoryBoard. Кроме того, вы можете достичь этого только с помощью одинарной двойной анимации со свойством, AutoReverse установленным в true значение.

Более того, выполняйте анимацию на объекте DropShadowEffect вместо объекта element.

 TimeSpan duration = TimeSpan.FromMilliseconds(2000);

DoubleAnimation animateOpacity = new DoubleAnimation() { From = 0, To = 1,
                                     Duration = duration, AutoReverse = true };

dropShadowEffect.BeginAnimation(DropShadowEffect.OpacityProperty,
                                animateOpacity);