我對大量的WPF還不是非常熟悉,所以如果這個查詢背叛了一些明顯的誤解,我會很感激他們被指出的。是否可以在不重新啓動整個動畫的情況下更新DoubleAnimation.FromProperty?
我試圖做的(無論好壞)是使DoubleAnimation.FromProperty
與包含/運行動畫的StackPanel的實際寬度同步。
我最初試圖用數據綁定來做這件事,
BindingOperations.SetBinding(anim,
DoubleAnimation.FromProperty,
new Binding {Source = panel, Path = new PropertyPath(ActualWidthProperty)});
但這似乎並不奏效。儘管我可以將文本框綁定到From屬性並查看它正在更改,但動畫仍會從初始值繼續運行。這與故事板凍結有關嗎? (我一無所知,但剛剛聽說)
然後我想,爲什麼不停止並重新啓動故事板(將其關閉並再次打開!),同時更改FromProperty,處理StackPanel.SizeChanged
事件。類似這樣的:
void panel_SizeChanged(object sender, SizeChangedEventArgs e)
{
if (myStoryBoard != null && myStoryBoard.GetCurrentState(panel) == ClockState.Active)
{
myStoryBoard.Stop(panel);
foreach(var child in myStoryBoard.Children)
{
var anim = child as DoubleAnimation;
if (anim == null) continue;
anim.From = panel.ActualWidth;
}
myStoryBoard.Begin(panel, true);
}
}
這是有效的,但是,當然,它每次調整面板大小時都會從頭開始動畫。我更喜歡的是能夠從被中斷的位置恢復動畫,但使用新的FromProperty。這甚至有可能嗎?
我不認爲這真的解決了這個問題。我需要設置From,因爲我想讓動畫循環。在這種情況下,它應該從面板的右邊緣循環到左邊的視野外。 – adhocgeek 2010-08-19 11:32:26
我編輯了我的答案,並認爲這會做到這一點。 – 2010-08-19 14:10:43