【发布时间】:2014-11-01 06:00:48
【问题描述】:
我想利用Storyboard 对象在特定时间调用方法。具体来说;我正在尝试使用具有Fire 方法的Firework 用户控件进行烟花表演。我想创建几个这样的控件并在特定时间调用它们的Fire 方法(就像真实的表演一样)。
通常,您会使用Storyboard 来随着时间的推移为对象的属性设置动画。 有没有办法调用方法?
类似的东西(当然是伪代码):
<Storyboard>
<MethodUsingKeyFrames>
<MethodKeyFrame KeyTime="0:0:1" TargetName="Firework1" Method="Fire"/>
<MethodKeyFrame KeyTime="0:0:2.5" TargetName="Firework2" Method="Fire"/>
</MethodUsingKeyFrames>
</Storyboard>
我考虑过只在高间隔上使用Timer 并自己进行排序,但这似乎是一种黑客行为;尤其是当我们有这么好的现有方法时。
注意: 与Use a storyboard to call a method in a usercontrol created dynamically 相关;这个问题(表面上)似乎是一样的,但答案与我想要完成的事情无关。
【问题讨论】:
-
这里有一个简单的想法:你需要一些
InvokeCommandAction(在System.Windows.Interactivity,当然它是在触发某些触发器时调用的。所以你需要使用Storyboard来触发这个触发器(例如通过将某些属性设置为触发触发器的值)。 -
@KingKing 我曾想过类似的事情;似乎有点hackish,但可能是最好的方法。当然比使用计时器并自己处理时间要好。
-
是的,它有点 hacky,但目前 XAML 迫使我们编写相当多的 hacky 代码(除非我们使用一些自定义库)。
-
你应该让这个问题在没有任何答案的情况下打开。所以更多的用户会注意到它并想要给出他们的答案(我个人很少点击至少有 1 个答案的问题)。另外,我使用 InvokeCommandAction 的次数不多,但它相当容易使用,您需要一个带有一些已绑定命令的视图模型......即使四处搜索也可以为您提供一些使用它的示例。
-
@KingKing 我当然会去谷歌搜索 :) 谢谢你的帮助;如果不出意外,我很乐意看到为未来用户形成的答案。也许你可以在我已经有另一个之后回答:)
标签: c# wpf storyboard