Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF-不透明度属性不';我第二次不工作了_C#_Wpf_Opacity - Fatal编程技术网

C# WPF-不透明度属性不';我第二次不工作了

C# WPF-不透明度属性不';我第二次不工作了,c#,wpf,opacity,C#,Wpf,Opacity,我有以下代码: // 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.Anima

我有以下代码:

    // 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);
//淡出照片,然后淡入画布
double DurationSeconds=duration.TimeSpan.TotalSeconds;
System.Windows.Media.Animation.Storyboard Storyboard=新的System.Windows.Media.Animation.Storyboard();
System.Windows.Media.Animation.DoubleAnimation Animation屏幕截图=新的System.Windows.Media.Animation.DoubleAnimation(1,0,新的持续时间(TimeSpan.FromSeconds(持续时间秒/3));
System.Windows.Media.Animation.Storyboard.SetTargetName(动画截图,DrawingCanVaTransition.Name);
System.Windows.Media.Animation.Storyboard.SetTargetProperty(动画截图,新属性路径(Image.OpacityProperty));
// !!!

矩形过渡。不透明度=1;// 除了将FillBehavior设置为Stop之外,正如您所提到的,还有一些其他方法可以确保不会发生此属性锁定:

  • 通过处理动画的已完成事件删除动画对象。(例如,“情节提要.删除(myObject)”)
  • 通过设置“自动反转”(AutoReverse)使动画可逆(如果希望最终结果与启动方式不同,显然这不起作用)
这实际上是一个非常常见的混淆来源,MSDN在这个主题上有一个明确的定义。

将答案与之比较。

您应该通过动画再次更改不透明度,或者以某种方式禁用动画。

矩形过渡是否有与之关联的画笔,以便您确实在更改颜色的不透明度?我正在更改矩形的不透明度,而不是画笔。@Tiberiu Right,但如果您在矩形上的填充没有画笔(颜色)与之相关的是,改变不透明度显然不会在视觉上做任何事情。。。将FillBehavior更改为Stop,因为我发现WPF中的动画会锁定该属性,除非指示不锁定该属性。@Tiberiu添加该解决方案,作为其他可能偶然发现此问题的人的答案。。。