【发布时间】:2011-06-24 22:56:30
【问题描述】:
我有以下代码:
// 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 属性根本没有改变。可能是什么问题呢? 在调试器中,.Opacity 属性 = 0,即使在它应该更改为 1 的行之后也是如此。 然而,动画确实有效。
【问题讨论】:
-
RectangleTransition 是否有与之关联的画笔,以便您确实在更改颜色的不透明度?
-
我正在改变矩形的不透明度,而不是画笔。
-
@Tiberiu Right 但是如果您在矩形上的填充没有与之关联的画笔(颜色),那么更改不透明度显然不会在视觉上做任何事情
-
没关系,我找到了解决方法...将 FillBehavior 更改为停止,因为我发现 WPF 中的动画会锁定属性,除非指示不要这样做。
-
@Tiberiu 添加解决方案作为其他可能偶然发现此问题的答案...