2012-01-23 50 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?