从.net代码停止并重新启动故事板的正确方法是什么?
我正在努力......
myStory.Stop(this);
期待随后调用.Begin(this);将从零时间线重新启动,但是,故事板会在停止的地方找到它。
我试过了
.Remove(this);
我试过
.Seek(TimeSpan.Zero);
也没用。
更多细节......这是我的故事板样本。
<Storyboard x:Key="overlay">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="textone" Storyboard.TargetProperty="(UIElement.Opacity)">
<SplineDoubleKeyFrame KeyTime="00:00:03.0" Value="0"/>
<SplineDoubleKeyFrame KeyTime="00:00:03.0" Value="1"/>
<SplineDoubleKeyFrame KeyTime="00:00:06.0" Value="1"/>
<SplineDoubleKeyFrame KeyTime="00:00:06.0" Value="0"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="texttwo" Storyboard.TargetProperty="(UIElement.Opacity)">
<SplineDoubleKeyFrame KeyTime="00:00:07.0" Value="0"/>
<SplineDoubleKeyFrame KeyTime="00:00:07.0" Value="1"/>
<SplineDoubleKeyFrame KeyTime="00:00:10.0" Value="1"/>
<SplineDoubleKeyFrame KeyTime="00:00:10.0" Value="0"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
因此textone中的文本会运行,如果你关闭屏幕并快速返回屏幕,那么texttwo实际上会播放一个新启动的故事板。所以原版(从第一个屏幕开始)故事板仍然在播放,即使我已经删除,并停止它。
答案 0 :(得分:9)
使用Storyboard.Seek(TimeSpan.Zero)怎么样?与在流中搜索类似,这应该会让您回到动画的开头。
我评论说您还应该确保IsControllable属性设置为true。牢记这一点!
答案 1 :(得分:3)
在调用myStory.Begin(this)之前,你需要做myStory.Remove(this)让它从头开始。这是因为调用Storyboard :: Stop只会停止动画时钟,但会使它们保持原样。随后对Begin的调用将简单地作为简历。我同意这有点违反直觉,但如果您阅读文档ClockController::Stop,您会在备注中看到以下内容:
此方法更改目标时钟 要停止的CurrentState。
可以重新启动已停止的时钟 使用Begin,Seek或 SeekAlignedToLastTick方法。
答案 2 :(得分:0)
答案 3 :(得分:0)
<Storyboard x:Key="overlay">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="textone" Storyboard.TargetProperty="(UIElement.Opacity)">
<SplineDoubleKeyFrame KeyTime="00:00:03.0" Value="0"/>
<SplineDoubleKeyFrame KeyTime="00:00:03.0" Value="1"/>
<SplineDoubleKeyFrame KeyTime="00:00:06.0" Value="1"/>
<SplineDoubleKeyFrame KeyTime="00:00:06.0" Value="0"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="texttwo" Storyboard.TargetProperty="(UIElement.Opacity)">
<SplineDoubleKeyFrame KeyTime="00:00:07.0" Value="0"/>
<SplineDoubleKeyFrame KeyTime="00:00:07.0" Value="1"/>
<SplineDoubleKeyFrame KeyTime="00:00:10.0" Value="1"/>
<SplineDoubleKeyFrame KeyTime="00:00:10.0" Value="0"/>
</DoubleAnimationUsingKeyFrames>
using System.Windows.Media.Animation;
然后创建新的故事板
Storyboard storyboard_name = (Storyboard)(FindResource("overlay"));
storyboard_name.Begin();
故事板“storyboard_name”将开始。
如果你想停止故事板。请尝试这样
storyboard_name.Stop();
如果你想删除storyboard.please试试这个
storyboard_name.Remove();
答案 4 :(得分:-1)
其他细节可以是:
this.MyAnimation.FillBehavior = FillBehavior.Stop;