2009-12-21 69 views
2

我有以下情節提要:編程扭轉故事板

<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:無法,因爲指定的故事板執行操作 是 從未應用於此對象的 互動控制。行動=「尋求」; Storyboard ='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(本)隱藏窗口之前,相同的效果:所述按鈕處於它們的最後位置。

任何想法?

謝謝。

回答

1

我認爲Storyboard.Stop()應該在這裏工作。但是如果你沒有發現任何優雅的東西,你可以在隱藏窗口後嘗試重置按鈕的變換。例如:

((TranslateTransform)((TransformGroup)topRightButton.RenderTransform)[3]).X = 0; 
((TranslateTransform)((TransformGroup)topRightButton.RenderTransform)[3]).Y = 0; 

希望我在鑄造時沒有犯任何錯誤。

注意:您還可以從MSDN找到有用的這個例子:How to: Control a Storyboard After It Starts

+0

停止做反向的動畫效果 - 但顯然它是瞬間的,而不是反其動畫。 – McGarnagle 2012-11-20 00:42:03

2

要使用StoryBoard.Remove()這樣 - 你應該保持引用到故事板中的對象。

像這樣:

Storyboard myStoryBoard; 

void MainWindow_Loaded(object sender, RoutedEventArgs e) 
{ 
    myStoryBoard = (Storyboard)Resources["myStoryBoard"]; 
    myStoryBoard.Begin(); 

} 

void sbRemoveEvent() 
{ 
    myStoryBoard.Remove(); 
}