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添加该解决方案,作为其他可能偶然发现此问题的人的答案。。。