WPF StoryBoard.Completed事件不触发 [英] WPF StoryBoard.Completed event not firing

查看:2160
本文介绍了WPF StoryBoard.Completed事件不触发的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我关闭主窗口,如下code表示之前的动画。问题是 StoryBoard.Completed 不点火。任何线索是什么原因造成的?

code

  DoubleAnimation是dblAnimX =新DoubleAnimation是(1.0,0.0,新的持续时间(TimeSpan.FromSeconds(0.5)));
dblAnimX.SetValue(Storyboard.TargetProperty,这一点);

DoubleAnimation是dblAnimY =新DoubleAnimation是(1.0,0.0,新持续时间(TimeSpan.FromSeconds(0.5)));
dblAnimY.SetValue(Storyboard.TargetProperty,这一点);

故事板故事=新的故事板();
Storyboard.SetTarget(dblAnimX,这一点);
Storyboard.SetTarget(dblAnimY,这一点);
Storyboard.SetTargetProperty(dblAnimX,新的PropertyPath(RenderTransform.ScaleX));
Storyboard.SetTargetProperty(dblAnimY,新的PropertyPath(RenderTransform.ScaleY));

story.Children.Add(dblAnimX);
story.Children.Add(dblAnimY);
story.Begin(本);

story.Completed + =(O,S)=> {this.Close(); };
 

解决方案

在调用开始之前添加完成处理程序:

  story.Completed + =(O,S)=>关闭();
story.Begin(本);
 


我想这种现象的原因是,完成处理程序实际上是连接到一个时钟对象,这是在开始创建。请参阅<一个备注部分href="http://msdn.microsoft.com/en-us/library/vstudio/system.windows.media.animation.timeline.completed.aspx">Completed:

  

虽然此事件处理似乎与时间轴相关联,   它实际上与这个时间表创建的时钟寄存器。对于   更多信息,请参见时序事件概述。

I have an animation before closing the main window, like the following code shows. Problem is the StoryBoard.Completed is not firing. Any clues what is causing this?

Code

DoubleAnimation dblAnimX = new DoubleAnimation(1.0, 0.0, new  Duration(TimeSpan.FromSeconds(0.5)));
dblAnimX.SetValue(Storyboard.TargetProperty, this);

DoubleAnimation dblAnimY = new DoubleAnimation(1.0, 0.0, new Duration(TimeSpan.FromSeconds(0.5)));
dblAnimY.SetValue(Storyboard.TargetProperty, this);

Storyboard story = new Storyboard();
Storyboard.SetTarget(dblAnimX, this);
Storyboard.SetTarget(dblAnimY, this);
Storyboard.SetTargetProperty(dblAnimX, new PropertyPath("RenderTransform.ScaleX"));
Storyboard.SetTargetProperty(dblAnimY, new PropertyPath("RenderTransform.ScaleY"));

story.Children.Add(dblAnimX);
story.Children.Add(dblAnimY);
story.Begin(this);

story.Completed += (o, s) => { this.Close(); };

解决方案

Add the Completed handler before calling Begin:

story.Completed += (o, s) => Close();
story.Begin(this);


I guess the reason for this behaviour is that the Completed handler is actually attached to a Clock object, which is created during Begin. See the Remarks section in Completed:

Although this event handler appears to be associated with a timeline, it actually registers with the Clock created for this timeline. For more information, see the Timing Events Overview.

这篇关于WPF StoryBoard.Completed事件不触发的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆