時(shí)間線(TimeLine)表示時(shí)間段。 它提供的屬性可以讓控制該時(shí)間段的長(zhǎng)度、開(kāi)始時(shí)間、重復(fù)次數(shù)、該時(shí)間段內(nèi)時(shí)間進(jìn)度的快慢等等。在WPF中內(nèi)置了如下幾種TimeLine:
常用屬性:
-
Duration: 動(dòng)畫播放時(shí)間長(zhǎng)度
-
RepeatBehavior: 重復(fù)行為(重復(fù)次數(shù))
-
FillBehavior: 動(dòng)畫結(jié)束后的行為(保持動(dòng)畫的結(jié)束狀態(tài)或恢復(fù)到初始狀態(tài))
-
AutoReverse: 按相反的順序重復(fù)播放動(dòng)畫
-
SpeedRatio: 動(dòng)畫播放速率(用于加速或減速播放)
-
BeginTime: 動(dòng)畫播放的起始時(shí)間
時(shí)間線控制:
到目前為止,我們雖然能創(chuàng)建并執(zhí)行動(dòng)畫,但僅僅能通過(guò)UIElement. BeginAnimation執(zhí)行開(kāi)始動(dòng)畫,還無(wú)法對(duì)動(dòng)畫進(jìn)行交互控制。在WPF中,還提供了一系列對(duì)時(shí)間線的控制操作,如:開(kāi)始、停止、暫停等。它們是通過(guò)Clock對(duì)象的Controller屬性來(lái)進(jìn)行的。下面就是一個(gè)簡(jiǎn)單的示例:
var widthAnimation = new DoubleAnimation() { From = 0, To = 320, Duration = TimeSpan.FromSeconds(5), };
var clock = widthAnimation.CreateClock(); button.ApplyAnimationClock(WidthProperty, clock);
await
Task.Delay(3000); clock.Controller.Pause();
從這個(gè)代碼中可以看出,控制時(shí)間線的一般步驟如下:
-
通過(guò)CreateClock函數(shù)創(chuàng)建時(shí)鐘對(duì)象Clock
-
通過(guò)UIElement. ApplyAnimationClock函數(shù)啟用支持時(shí)鐘控制的動(dòng)畫
-
使用Clock. Controller的方法控制動(dòng)畫
更加詳盡的例子可以參看MSDN文檔:以交互方式控制時(shí)鐘
除了在Controller中提供了交互方法以為,Clock對(duì)象還提供了一系列屬性和事件方便我們的獲取狀態(tài),常見(jiàn)的有:
-
CurrentProgress 當(dāng)前進(jìn)度
-
CurrentState 當(dāng)前狀態(tài)
-
CurrentTime 當(dāng)前播放時(shí)間
-
IsPaused 是否處于暫停狀態(tài)
-
NaturalDuration 動(dòng)畫持續(xù)時(shí)間
也提供了一系列事件來(lái)主動(dòng)通知狀態(tài)的變更,常用的事件為:
-
Completed:動(dòng)畫結(jié)束時(shí)的通知
-
CurrentGlobalSpeedInvalidated 播放速率變化時(shí)的通知,
-
CurrentStateInvalidated 狀態(tài)變化時(shí)的通知
-
CurrentTimeInvalidated 播放時(shí)間變化時(shí)的通知
-
RemoveRequested 動(dòng)畫移除時(shí)候的通知
這幾個(gè)事件在TimeLine對(duì)象中也是有的,這樣,在不使用Clock對(duì)象的時(shí)候也可以或者這些狀態(tài)的變化。 如果想更加收入的理解計(jì)時(shí)系統(tǒng)的工作方式,可以看看動(dòng)畫和計(jì)時(shí)系統(tǒng)概述一文。
另外,有的特殊的TimeLine對(duì)象,如Storyboard本身就封裝了動(dòng)畫的控制相關(guān)內(nèi)容,可以直接對(duì)動(dòng)畫進(jìn)行控制。關(guān)于Storyboard需要介紹的內(nèi)容比較多,后面再單獨(dú)寫文章介紹。
|