2016-11-22 61 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); 
}