wpf 之動畫
前提概念
1)觸發器,對觸發器不熟的,可以先看WPF之觸發器
1. 類結構關係
本次章節,我們只講動畫中的 DoubleAnimation 動畫。以此為基礎,瞭解動畫。
我們先來看看 WPF 實現動畫時涉及到的類,以及他們之間的關係。
1.1 關係圖如下:

動畫涉及到的類.png
1.2 圖中關係解釋:
1)閉合箭頭表示繼承,閉合箭頭表示關聯;
這裡用到單向關聯比如:BeginStoryboard 單向關聯 Storyboard,
即 BeginStoryboard 知道 Storyboard 的存在,可以呼叫 Storyboard 的方法和屬性。
2)Trigger、DataTrigger、EventTrigger 都繼承自 TriggerBase,他們擁有值型別為 TriggerActionCollection 的屬性,這裡暫時將 TriggerBase 單向關聯到 TriggerAction;
TriggerActionCollection 是值為 TriggerAction 物件的集合。
3)BeginStoryboard 繼承自 TriggerAction,因此可以作為 TriggerBase 中 EnterActions、ExitActions、Actions 的子項;
4)BeginStoryboard 用於啟動 Storyboard 並將動畫分發給動畫的目標屬性和物件;
5)Storyboard 是 TimelineGroup 的子類,擁有型別為 TimelineCollection 的屬性 Children,因此可以往裡新增繼承自 Timeline 類的類的物件,例如 DoubleAnimation。
6)DoubleAnimation 表示在指定的時間內,使用線性內擦,對兩個目標值之間的 System.Double 屬性值進行動畫處理。
簡單地說:就是用動畫展示某控制元件的屬性值從一個 double 值變化到另一個 double 值的過程。
例如:用動畫展示一個 Button 控制元件的 Width 從 100 放大的 200 的過程。
講了這麼多,放個程式碼上來,也許會更好理解:
// 程式碼: <Button> <Button.Style> <Style TargetType="{x:Type Button}"> <Style.Triggers> <EventTrigger RoutedEvent="Window.Loaded"> <EventTrigger.Actions> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetProperty="Width" From="0" To="100" Duration="0:0:0.2"/> </Storyboard> </BeginStoryboard> </EventTrigger.Actions> </EventTrigger> </Style.Triggers> </Style> </Button.Style> </Button> // 解釋: <Button> <Button.Style> <Style TargetType="{x:Type Button}"> <Style.Triggers> //事件觸發器:當 window 載入時,觸發 <EventTrigger RoutedEvent="Window.Loaded"> <EventTrigger.Actions> //往 Actions 這個 TriggerActionCollection 新增 一個或多個類為 BeginStoryboard 的物件 <BeginStoryboard> //BeginStoryboard 有個屬性為 Storyboard <Storyboard> //Storyboard 是 TimelineGroup 的子類,擁有型別為 TimelineCollection 的屬性 Children,可以往裡新增 Timeline 類的物件,例如 DoubleAnimation <DoubleAnimation Storyboard.TargetProperty="Width" From="0" To="100" Duration="0:0:0.2"/> </Storyboard> </BeginStoryboard> </EventTrigger.Actions> </EventTrigger> </Style.Triggers> </Style> </Button.Style> </Button>
當然,你也可以用 DataTrigger、Trigger 的 EnterActions、ExitActions 來新增 BeginStoryboard。
2. 動畫的分發
上述講了 WPF 來觸發動畫的原理,接下來來看動畫的分發。
即把這個動畫給誰動,怎麼動。
2.1. 我們再回過頭看 BeginStoryboard、 Storyboard 和 DoubleAnimation 的解釋:
1)BeginStoryboard:啟動 Storyboard,並將動畫分發給動畫的目標物件和屬性;
2)Storyboard:為容器的子動畫提供物件和屬性目標資訊的容器時間線;
3)DoubleAnimation:在指定的時間內,使用線性內擦,對兩個目標值之間的 System.Double 屬性值進行動畫處理。
2.2. 定義 DoubleAnimation 的程式碼
<DoubleAnimation Storyboard.TargetProperty="Width" From="0" To="100" Duration="0:0:0.2"/>
1)Storyboard.TargetProperty 是附加屬性,類似於 Grid 面板下的控制元件中的 Grid.Row;
這裡把動畫的屬性繫結到 Width;
2)Form 表示起始值,To 表示目標值,Duration 表示時間;
3)Duration、From、To 結合起來,就是 DoubleAnimation 的功能:在指定的時間內,將屬性值從一個 Double 值"變到"另一個 Double 值的動畫處理。