我想利用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
并自己进行测序,但这似乎是一个黑客攻击;特别是当我们有这么好的现有方式时。
注意:与Use a storyboard to call a method in a usercontrol created dynamically相关;问题(面值)似乎是一样的,但答案与我想要完成的事情无关。
答案 0 :(得分:1)
以下是我最终的目的:
将依赖项属性NeedsToFire
添加到用户控件(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();
}
}
最后,使用BooleanAnimationUsingKeyFrames
在正确的时间设置此属性:
<Storyboard x:Key="FireworksShow">
<BooleanAnimationUsingKeyFrames Storyboard.TargetName="Firework1"
Storyboard.TargetProperty="NeedsToFire">
<DiscreteBooleanKeyFrame KeyTime="0:0:0.5" Value="True" />
</BooleanAnimationUsingKeyFrames>
</Storyboard>
这似乎是最容易实施的解决方案;即使它确实需要以某种方式使用依赖属性,它们也不一定是这样。它还允许重复射击。