【问题标题】:WPF - Opacity property doesn't work the second timeWPF - 不透明度属性第二次不起作用
【发布时间】: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 添加解决方案作为其他可能偶然发现此问题的答案...

标签: c# wpf opacity


【解决方案1】:

除了将 FillBehavior 设置为 Stop 之外,正如您所提到的,还有其他几种方法可以确保不会发生此属性锁定:

  • 通过处理动画的 Completed 事件来移除动画对象。 (例如,“storyboard.Remove(myObject)”)
  • 通过设置 AutoReverse 使动画可逆(如果您希望最终结果与开始的方式不同,这显然不起作用)。

这实际上是一个非常常见的混淆来源,MSDN 对此主题有一个decent-sized writeup

【讨论】:

    【解决方案2】:

    将答案与this question进行比较。
    您应该通过动画再次更改不透明度或以某种方式禁用您的动画。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-04
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多