【问题标题】:Continue WPF animation with other storyboard (not from start)使用其他情节提要继续 WPF 动画(不是从头开始)
【发布时间】:2012-02-17 01:30:53
【问题描述】:

使用 WPF 3.5 我想移动画布,并在完成此动画后使用第二个故事板进一步移动它。我有以下内容:

<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 属性值,但似乎第二个故事板只适用于初始值(尽管画布似乎没有跳回到最开始,至少在视觉上)。

除了将转换放入一个故事板之外,我还需要一个解决方案。

【问题讨论】:

  • 我发现 TargetName 不能出现在超过 1 个 Storyboard 中,但我希望你能找到解决办法。
  • 感谢您的回答,但我认为这不是问题所在。在查看了所有相关属性后,我终于找到了解决方案。我会尽快发布(发布问题后会被罚 8 小时)

标签: .net wpf animation storyboard


【解决方案1】:

有一个 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>            

另一个解决方案是在 Completed 事件处理程序期间更新底层动画属性: Remove storyboard but keep animated value?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 2015-02-14
    • 2010-12-26
    • 2017-07-15
    • 2011-01-12
    • 1970-01-01
    相关资源
    最近更新 更多