我想利用一个Storyboard
对象在特定时间调用方法。具体来说; 我正在尝试使用Firework
具有Fire
方法的用户控件来制作烟花表演。我想创建几个这样的控件,并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
高间隔并自己进行排序,但这似乎是一种技巧。尤其是当我们有这么好的现有方法时。
注意:与使用情节提要板调用动态创建的用户控件中的方法有关;这个问题(从表面上看)似乎是相同的,但是答案与我要完成的任务无关。
这就是我最终要进行的工作:
将依赖项属性添加NeedsToFire
到用户控件(a bool
)。然后PropertyChanged
使用以下函数处理事件(通过元数据):
public bool NeedsToFire
{
get { return (bool)GetValue(NeedsToFireProperty); }
set { SetValue(NeedsToFireProperty, value); }
}
public static readonly DependencyProperty NeedsToFireProperty =
DependencyProperty.Register("NeedsToFire", typeof(bool),
typeof(Firework), new PropertyMetadata(false, HandleNeedsToFire));
private static void HandleNeedsToFire(DependencyObject d,
DependencyPropertyChangedEventArgs e)
{
if ((bool)e.NewValue)
{
(d as Firework).Fire();
}
}
最后,使用aBooleanAnimationUsingKeyFrames
在正确的时间设置此属性:
<Storyboard x:Key="FireworksShow">
<BooleanAnimationUsingKeyFrames Storyboard.TargetName="Firework1"
Storyboard.TargetProperty="NeedsToFire">
<DiscreteBooleanKeyFrame KeyTime="0:0:0.5" Value="True" />
</BooleanAnimationUsingKeyFrames>
</Storyboard>
这似乎是最容易实现的解决方案。即使它确实需要以不一定非要使用的方式使用依赖项属性。它还允许重复发射。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句