我有以下故事板:
<Window.Resources>
<Storyboard x:Key="ButtonsAnim">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="topRightButton" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)">
<SplineDoubleKeyFrame KeyTime="00:00:00" Value="0"/>
<SplineDoubleKeyFrame KeyTime="00:00:00.2000000" Value="-100"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="topRightButton" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">
<SplineDoubleKeyFrame KeyTime="00:00:00" Value="0"/>
<SplineDoubleKeyFrame KeyTime="00:00:00.2000000" Value="100"/>
...
它基本上会在画布中移动一些按钮。
这是启动动画的代码:
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
Storyboard sb = (Storyboard)Resources["ButtonsAnim"];
storyBoard = sb;
storyBoard.Begin(this, true);
}
我要做的是在点击隐藏窗口的按钮时重置动画。当窗口重新出现时,动画应该从头开始。
当应用程序重新出现时,我尝试使用storyBoard.Begin(this,true)但是在这第一个毫秒时按钮位于它们的最后位置。
然后我在隐藏窗口之前尝试了storyBoard.seek(TimeSpan.Zero),但它失败了:
System.Windows.Media.Animation 警告:6:无法执行操作 因为指定的故事板是 从未应用于此对象 互动控制。行动=“寻求”; 故事板= 'System.Windows.Media.Animation.Storyboard'; Storyboard.HashCode = '24901833'; Storyboard.Type = 'System.Windows.Media.Animation.Storyboard'; TargetElement = 'System.Windows.Media.Animation.Storyboard'; TargetElement.HashCode = '24901833'; TargetElement.Type = 'System.Windows.Media.Animation.Storyboard'
在隐藏窗口之前我也尝试过storyBoard.remove(this),效果相同:按钮位于最后位置。
有什么想法吗?
谢谢。
答案 0 :(得分:2)
以这种方式使用StoryBoard.Remove()
- 您应该继续引用您的storyboard对象。
像这样:
Storyboard myStoryBoard;
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
myStoryBoard = (Storyboard)Resources["myStoryBoard"];
myStoryBoard.Begin();
}
void sbRemoveEvent()
{
myStoryBoard.Remove();
}
答案 1 :(得分:1)
我认为Storyboard.Stop()
应该在这里工作。但是如果你没有找到任何优雅的东西,你可以在隐藏窗口后尝试重置按钮的变换。 E.g:
((TranslateTransform)((TransformGroup)topRightButton.RenderTransform)[3]).X = 0;
((TranslateTransform)((TransformGroup)topRightButton.RenderTransform)[3]).Y = 0;
希望我在施法时没有犯任何错误。
注意:您也可以在MSDN中找到有用的示例:How to: Control a Storyboard After It Starts