2011-01-29 18 views
2

是否有內置內容可將所有已完成對象的動畫重置爲其預動畫值?在Silverlight中將對象重置爲預先動畫值

我正在做的是加載一個用戶控件在畫布上,當添加時運行一組動畫。後來,我刪除了usercontrol(Canvas.Children.Clear),但不刪除它。如果我再次將它重新添加到畫布中,我希望它出現就好像它已被重新加載(即對象都從它們的預動畫值再次開始並開始動畫),但控件不是重新加載,它是隻是再次顯示。

像矩形一樣是visibility.collapsed和canvas.left = 10,因爲它是預動畫狀態,visibility.visible和canvas.left = 50,因爲它是動畫後狀態。在添加畫布時,無論是第一次加載還是稍後加入,我都希望它進入預先動畫狀態。

有沒有任何直接的方法來做到這一點?

回答

2

這些動畫將是一個或多個Storyboard對象的子對象。您需要在用戶控件的Unloaded事件中停止這些故事板。

大多數開發人員似乎缺少的是沒有持續時間的Storyboard將無限期地運行。這是錯過的,因爲這種無限期運行的結果往往是可取的。例如,一個動畫淡化了一個元素,開發者希望它保持淡出。如果動畫所屬的時間線已停止,則在動畫開始之前,該元素的不透明屬性將跳回到指定的值。

在您的情況下,您還希望在加載Usercontrol時動畫的故事板無限期運行。然而爲了達到你想要的效果,你需要在卸載的事件中停止這些故事板。

它很容易停止故事板,它有一個Stop方法。訣竅是掌握故事板。最簡單的方式是給storyboard一個x:Name。現在你可以做這樣的事情: -

public MyUserControl() 
    { 
     InitializeComponent(); 
     Unloaded += MyUserControl_Unloaded; 

    } 

    void MyUserControl_Unloaded(object sender, RoutedEventArgs e) 
    { 
     LoadedStoryboard.Stop(); 
    } 

其中LoadedStoryboardx:Name爲運行加載的動畫故事板的價值。

+0

這是完美的,它的工作原理與你描述的一樣。優秀!!! – Stan 2011-03-05 18:48:07