.net 将情节提要动画向后搜索到特定点,然后播放

.net 将情节提要动画向后搜索到特定点,然后播放,.net,wpf,animation,storyboard,.net,Wpf,Animation,Storyboard,我有一个简单的故事板动画,如下所示: <Window.Resources> <Storyboard x:Key="fader"> <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)"> <SplineDoubleKeyFrame KeyTime="0:0:0" Value="0"/>

我有一个简单的故事板动画,如下所示:

 <Window.Resources>
    <Storyboard x:Key="fader">
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)">
            <SplineDoubleKeyFrame KeyTime="0:0:0" Value="0"/>
            <SplineDoubleKeyFrame KeyTime="0:0:0.5" Value="1"/>
        </DoubleAnimationUsingKeyFrames>
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)">
            <SplineDoubleKeyFrame KeyTime="0:0:4" Value="1"/>
            <SplineDoubleKeyFrame KeyTime="0:0:6" Value="0"/>
        </DoubleAnimationUsingKeyFrames>
    </Storyboard>
</Window.Resources>
但是,我试图处理在通知窗口已经显示时发生第二个事件的情况。在这种情况下,我要寻找的行为是修改窗口的内容以反映第二个事件(简单),并在故事板的整个生命周期内(即在它出现之后)将其“倒回”到0.5秒

换句话说,第二个事件应在第二个事件发生后3.5s发生淡出,即使窗口已经存在0到6秒之间的时间

我尝试通过检测窗口的不透明度来实现这一点,如果它>0,则调用以下命令:

board.Seek(this,TimeSpan.FromSeconds(0.5),TimeSeekOrigin.BeginTime);
但是,这似乎没有任何作用,即使我反复触发事件,窗口内容也会改变,但通知程序会尽职尽责地淡入,等待3.5秒,然后再次淡出


为什么这不起作用?这是实现我想要实现的目标的最佳方式吗?

我认为这里的问题是,您将淡入淡出作为一个动画。我可能会这样做:

board.Seek(this,TimeSpan.FromSeconds(0.5),TimeSeekOrigin.BeginTime);
  • 将动画分为两部分:淡入和淡出
  • 定义3.5s的
    displayPeriod
    常量值(或您想要的任何值。用户可配置设置?)
  • 当收到通知时,触发一个事件。如果是第一个通知,请运行淡入动画。如果不是第一次通知,请转到5
  • 启动一个计时器,该计时器将倒计时
    显示周期
    秒数
  • 如果在计时器过期之前收到另一个通知,请取消并重新启动
  • 当计时器最终过期时,运行淡出动画
  • 有更多的代码要编写,但这可能比尝试将动画填充到情节提要中的正确点要简单


    如果您想在实现此功能的同时使用一些酷炫的技术,请查看以处理通知流和计时器事件

    同意-如果我不想改变的话,拥有一个动画的最初想法可能是好的。然而,新的需求意味着将其全部抛弃,并以不同的方式进行。我要去狂欢一下。太棒了!很高兴有用:-)