咱們所實現的的動畫中,很大一部分是讓一個屬性在起始值和結束值之間變化,例如,我在前文中實現的改變寬度的動畫:html
var widthAnimation = new DoubleAnimation()
{
From = 0,
To = 320,
Duration = TimeSpan.FromSeconds(2),
RepeatBehavior = RepeatBehavior.Forever,
};
button.BeginAnimation(WidthProperty, widthAnimation); windows
這個動畫實現了寬度在0和320之間的變化,因爲寬度是一個double型,所以這裏用的是DoubleAnimation。對於一些其它常見的類型,如Byte、Color、Int3二、Size、Point等,在System.Windows.Media.Animation下都有相應的過渡動畫實現,命名規則是"數據結構類型+Animation"這裏就很少介紹了。 數據結構
這種過渡動畫通常成爲From/To/By 動畫,是由於它們是經過From、To、By三個屬性來決定了目標屬性的起始值和結束值。首先咱們來看下這三個屬性表明的意義: post
-
From: 起始值,在動畫開始的時候將目標屬性設置爲該值
-
To: 結束值,動畫結束是目標屬性爲改值
-
By: 偏移值:動畫結束的時候目標屬性爲"初始值+偏移值"
很明顯,To和By的效果是有可能衝突的。實際上,這三個屬性都是可選設置的,而且在設置了To和By的時候,是會忽略By屬性的。下面我再經過一些簡單的場景介紹一下這三個屬性如何組合使用。 動畫
-
由0 變爲 320: From = 0, To = 320
-
由初始值變爲320: To = 320
-
由0變爲初始值: From = 0
-
由0增大150: From = 0, By = 150
-
由初始值增大150: By = 150
看了這幾個用例後,相信你們已經大體能明白這三個參數的使用方法。 url
爲何這麼設計 設計
初一看上去,這種From、To、By的三參數設計得過於複雜,徹底能夠用From和To兩個參數能夠肯定,須要用到By的地方經過運算獲取。 甚至From和To也能夠強制要求賦值,這樣就不會出現From和To都不賦值的這種非法狀況了。爲何要這麼設計呢? 我以爲有兩個緣由: htm
-
這種比較靈活的方式能夠方便將動畫和具體的對象分離出來,能夠方便複用和組合。
-
方便在XAML中使用。若是像我上述的那樣的作法,不少時候須要取對象的初始值,用XAML編寫複雜的動畫時,這種操做並非是很方便。
時間控制 對象
這裏只介紹瞭如何設置過渡動畫的起始狀態和終止狀態,動畫還有一個比較重要部分是時間控制,如動畫時間段的長度、開始時間、重複次數、進度的快慢,結束通知等。這些都是在其基類TimeLine中控制的,下一章將單獨對其介紹。 blog
參考資料
http://msdn.microsoft.com/zh-cn/library/aa970265(v=vs.110).aspx