WPF - свойство непрозрачности не работает во второй раз - PullRequest
0 голосов
/ 10 февраля 2011

У меня есть следующий код:

    // Fade out the photo, and after, fade in canvas
double DurationSeconds = duration.TimeSpan.TotalSeconds;

System.Windows.Media.Animation.Storyboard storyboard = new System.Windows.Media.Animation.Storyboard();

System.Windows.Media.Animation.DoubleAnimation animScreenshot = new System.Windows.Media.Animation.DoubleAnimation(1, 0, new Duration(TimeSpan.FromSeconds(DurationSeconds / 3)));
System.Windows.Media.Animation.Storyboard.SetTargetName(animScreenshot, DrawingCanvasTransition.Name);
System.Windows.Media.Animation.Storyboard.SetTargetProperty(animScreenshot, new PropertyPath(Image.OpacityProperty));

// !!!
RectangleTransition.Opacity = 1; // <----------------- PROBLEM IS HERE
RectangleTransition.UpdateLayout();

System.Windows.Media.Animation.DoubleAnimation animRect = new System.Windows.Media.Animation.DoubleAnimation(1, 0, new Duration(TimeSpan.FromSeconds(DurationSeconds / 3)));
animRect.BeginTime = TimeSpan.FromSeconds( DurationSeconds * .66);
System.Windows.Media.Animation.Storyboard.SetTargetName(animRect, RectangleTransition.Name);
System.Windows.Media.Animation.Storyboard.SetTargetProperty(animRect, new PropertyPath(Rectangle.OpacityProperty));

storyboard.Children.Add(animScreenshot);
storyboard.Children.Add(animRect);

// And start!
storyboard.Begin(this);

Проблема в том, что при первом вызове функции анимация работает отлично. Во второй раз свойство непрозрачности вообще не меняется. В чем может быть проблема? В отладчике свойство .Opacity = 0 даже после строки, где оно должно измениться на 1. Однако анимация работает.

Ответы [ 2 ]

2 голосов
/ 15 февраля 2011

Помимо установки FillBehavior в Stop, как вы упомянули, есть несколько других способов убедиться, что блокировка этого свойства не происходит:

  • Удалите объект анимации, обработав событие Завершено анимации. (например, "storyboard.Remove (myObject)")
  • Сделайте анимацию обратимой, установив AutoReverse (очевидно, это не сработает, если вы хотите, чтобы конечный результат отличался от того, как вы начали).

На самом деле это очень распространенный источник путаницы, и у MSDN есть приличная запись на эту тему.

1 голос
/ 28 ноября 2013

Сравните ответ на вопрос на этот вопрос .
Вы должны снова изменить прозрачность с помощью анимации или каким-либо образом отключить анимацию.

...