本篇接上一篇,在上一篇中,我们制作了一个简单利用动画来控制播放一首MP3的例子,那么如果我们想监视到动画执行到什么进度了呢?很明显,WPF时可以做到的,只需要响应故事板的CurrentTimeInvalidated事件。
话不多少直接上代码(不了解代码结构的朋友可以看看上一篇):
前台Xaml:
1.添加一个ProgressBar监视进度,注意这里最大值设置为1,因为动画始终Clock的CurrentProcess属性最大值是1。
<ProgressBar x:Name="prsbar" HorizontalAlignment="Left" Maximum="1" Height="7" VerticalAlignment="Top" Width="677" Margin="0,30,0,0"/>
2.响应故事板的CurrentTimeInvalidated事件
<Storyboard x:Key="music" BeginTime="0:0:1" CurrentTimeInvalidated="Storyboard_CurrentTimeInvalidated" >
<MediaTimeline Storyboard.TargetName="md" d:DesignTimeNaturalDuration="205" Source="ALWAYS.mp3"/>
</Storyboard>
后台代码:
/// <summary>
/// 该事件在动画前进一个步长时发生
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Storyboard_CurrentTimeInvalidated(object sender, EventArgs e)
{
//Clock对象为动画时钟
Clock clock = (Clock)sender;
if(clock.CurrentProgress==null)
{
this.prsbar.Value = 0;
}
else
{
this.prsbar.Value = (double)clock.CurrentProgress;
}
}
最终效果如下:
![1106dea11c58f37bb3b677716504ed14.gif](https://i-blog.csdnimg.cn/blog_migrate/22949eb24f3df14d4cae659565f0b5de.gif)
当然,故事板还有其他的事件,比如Completed,CurrentStateValidated等等,有兴趣的朋友欢迎留言一起交流哦。