2012-01-23 138 views
1

使用WPF 3.5我想移動一個畫布,並在完成此動畫後,使用第二個故事板進一步移動它。我有以下幾點:繼續WPF動畫與其他故事板(不是從開始)

<Storyboard x:Key="Move" Completed="OnMoveCompleted" AutoReverse="False" FillBehavior="HoldEnd"> 
    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" Storyboard.TargetName="canvas"> 
     <SplineDoubleKeyFrame KeyTime="0:0:1.5" Value="-50"/> 
    </DoubleAnimationUsingKeyFrames> 
</Storyboard> 

<Storyboard x:Key="Move2" AutoReverse="False"> 
    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" Storyboard.TargetName="canvas"> 
     <SplineDoubleKeyFrame KeyTime="0:0:1.5" Value="-75"/> 
    </DoubleAnimationUsingKeyFrames>    
</Storyboard> 

而且在後面的代碼我得到:

public void OnMoveCompleted(object sender, EventArgs e) 
{ 
    var moveStoryboard = (Storyboard)FindResource("Move2"); 
    moveStoryboard.Begin(); 
} 

MOVE2僅移動帆布75 - 50 = 25個像素。我希望畫布先移動50個像素,然後再移動另外75個像素。我認爲它可以工作,因爲FillBehaviour =「HoldEnd」,所以下一個故事板可以與來自第一個故事板的轉換後的Y屬性值一起工作,但似乎第二個故事板僅與初始值一起工作(儘管畫布似乎並不跳回到最初,至少在視覺上)。

除了將轉換放入一個故事板之外,我需要一個解決方案。

+0

我發現是一個的TargetName不能在超過1個故事板,但我希望你找到一個方法。 – Paparazzi

+0

感謝您的回答,但我不認爲這是問題所在。在查看所有相關屬性後,我終於找到了解決方案。我會盡快將其發佈(在發佈問題後8小時處罰) – user764754

回答

2

有一個IsAdditive屬性可以設置,所以第二個動畫是相對於第一個。我們可以簡單的寫了下面的XAML:

<Storyboard x:Key="Move2" AutoReverse="False"> 
<DoubleAnimationUsingKeyFrames IsAdditive="True" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" Storyboard.TargetName="canvas"> 
    <SplineDoubleKeyFrame KeyTime="0:0:1.5" Value="-75"/> 
</DoubleAnimationUsingKeyFrames>    

另一個解決方案是在完成事件處理程序更新的基本動畫特性: Remove storyboard but keep animated value?