Продолжить анимацию WPF с другой раскадровкой (не с самого начала) - PullRequest
1 голос
/ 23 января 2012

Используя 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 из первой раскадровки, но кажется, что вторая раскадровка просто работает с начальным значением (хотя холст, кажется, не вернуться к самому началу, хотя бы визуально).

Пожалуйста, мне нужно решение, не считая просто преобразования в одну раскадровку.

1 Ответ

2 голосов
/ 24 января 2012

Существует свойство 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: Удалить раскадровку, но сохранить анимированное значение?

...