2016-11-22 62 views
0

我有一个范围控件,其操作顺序包含在故事板中。我创建了一系列动作,但我想在用户单击倒退按钮时反转动画。我也有一个暂停按钮,它工作正常。单击事件时反转故事板的动画

Screenshot of control

播放按钮代码:

public void Animate(DateTime endDate) 
{ 
    previousMaxValue = (DateTime)rangeControl.SelectionRangeEnd; 
    previousMinValue = (DateTime)rangeControl.SelectionRangeStart; 
    double toValue = (endDate - previousMaxValue).TotalSeconds; 
    TimeSpan sp = TimeSpan.FromSeconds(diffInSeconds); 
    animation = new DoubleAnimation(0, toValue, new Duration(sp)); 

    storyboard.Children.Clear(); 
    storyboard.Children.Add(animation); 
    storyboard.AutoReverse = true; 
    Storyboard.SetTarget(animation, this); 
    Storyboard.SetTargetProperty(animation, new PropertyPath(AxisRangeAnimator.ValueProperty)); 
    storyboard.Begin(); 
} 

暂停按钮代码:

public void Pause() 
{ 
    storyboard.Pause(); 
} 

我想设置反向按钮。 storyboard.AutoReverse属性使得动画在结束时反转,但是当用户在动画所在的位置点击按钮时,我想达到这种效果。

+1

您是否试过取消动画并启动一个完全相反的动画? –

+0

我也会试试这个。我建议我需要故事板的实际位置,并在实际动画的使用时间设置时间 – imj

+1

只需从最后开始向前动画和向后动画,然后即可使用HandoffBehavior.Compose,以便在应用第二个动画时合并2个动画并恢复原始位置。 –

回答

0

当下一个时钟滴答发生时,StoryBoard.Seek方法寻求故事板到一个新位置。

public void Reverse() 
{ 
    TimeSpan CurrentTime = (TimeSpan)storyboard.GetCurrentTime(); 
    TimeSpan sp = TimeSpan.FromSeconds(diffInSeconds); 
    TimeSpan SubtractTime = sp.Subtract(CurrentTime); 
    storyboard.Seek(SubtractTime, TimeSeekOrigin.Duration); 
}