七、動畫和互動
快到最後了,忽然間有點懶了,正好體現了黎明前的黑暗,一定得要緊牙關繼續下去才行啊:)
好了,給自己打完氣了,開始吧
1、根據一個例子來進入SilverLight的動畫世界
a. 找出將要進行動畫處理的控制項
<Ellipse x:Name="ellipse"
Height="20" Width="20" Canvas.Left="30" Canvas.Top="30"
Fill="black" />
也就是要給控制項聲明一個名字, x:Name
b. 建立EventTrigger
<Canvas.Triggers>
<EventTrigger RoutedEvent="Canvas.Loaded">
<EventTrigger.Actions>
<BeginStoryboard>
<!-- Insert Storyboard here. -->
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Canvas.Triggers>
使用RoutedEvent指定事件,在BeginStoryboard中開始動畫
EventTrigger僅僅支援一個事件,那就是Loaded
c. 建立Storyboard和一個動畫
使用DoubleAnimation 來控制Canvas.Left,因為Canvas.Left是double型的
<Canvas
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Canvas.Triggers>
<EventTrigger RoutedEvent="Canvas.Loaded">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="ellipse"
Storyboard.TargetProperty="(Canvas.Left)"
To="300" Duration="0:0:1" />
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Canvas.Triggers>
<Ellipse x:Name="ellipse"
Height="20" Width="20" Canvas.Left="30" Canvas.Top="30"
Fill="black"/>
</Canvas>
Duration是指動畫一共用多長時間,格式為hour:minute:second
To是指變化的最終值
Storyboard.TargetName是指將要進行動畫的控制項名
Storyboard.TargetProperty是指將要變化的屬性名稱
2、其他類型的動畫
SilverLight還支援其他類型的動畫,如ColorAnimation,PointAnimation等
多說無益,還是看例子吧
<Canvas
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Canvas.Triggers>
<EventTrigger RoutedEvent="Canvas.Loaded">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation
Storyboard.TargetName="e1_brush"
Storyboard.TargetProperty="Color"
From="Red" To="Blue" Duration="0:0:5" />
<ColorAnimation
Storyboard.TargetName="e2"
Storyboard.TargetProperty="(Fill).(Color)"
From="Red" To="Blue" Duration="0:0:5" />
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Canvas.Triggers>
<Ellipse
Height="100" Width="100" Canvas.Left="30" Canvas.Top="30">
<Ellipse.Fill>
<SolidColorBrush x:Name="e1_brush" Color="black"/>
</Ellipse.Fill>
</Ellipse>
<Ellipse x:Name="e2" Fill="Black"
Height="100" Width="100" Canvas.Left="30" Canvas.Top="130"/>
</Canvas>
有兩種不同的方式表示顏色,並使其變化
一個是直接指定Fill屬性,另一個是聲明一個SolidColorBrush,再指定其color屬性
表現在動畫上,不同之處就是TargetProperty
3、Timelines的屬性
Storyboard 和 DoubleAnimation 都是Timeline類的子類
Timeline的一些有用屬性是
Storyboard.TargetName:
Storyboard.TargetProperty:
BeginTime:
Duration: 這個屬性除了設定時間間隔外,還有兩個特殊值 "Forever" 或"Automatic". 預設值
是 "Automatic".
FillBehavior: 是指在他停止運行時做的行為,有兩個值 Stop 或HoldEnd. "Stop" 將其屬性值
設定成剛剛開始動畫時的狀態; "HoldEnd" 表示動畫屬性將停止在最後那一刻的值上. 預設值是
"HoldEnd".
RepeatBehavior: 這個屬性可以有三種類型的值: 迴圈計數, 時間值, 或者是Forever. "Forever"
導致時間幀無線迴圈
例如,設定 RepeatBehavior 為"0:0:5" 然後 Duration 為 2.5 秒,這個動畫將運行兩次;迴圈
技術可以指定迴圈幾次,例如,4x,1x
<Storyboard
Storyboard.TargetName="e1"
Storyboard.TargetProperty="(Canvas.Left)"
BeginTime="0:0:1">
<DoubleAnimation To="300" />
<DoubleAnimation To="300" Storyboard.TargetName="e2"/>
<DoubleAnimation To="80" Storyboard.TargetName="e3"
Storyboard.TargetProperty="Width"/>
<DoubleAnimation From="200" To="300" Storyboard.TargetName="e4"/>
<DoubleAnimation To="300" Duration="0:0:5.3" Storyboard.TargetName="e5"/>
<DoubleAnimation FillBehavior="HoldEnd" To="200"
Storyboard.TargetName="e6"/>
<DoubleAnimation FillBehavior="Stop" To="200" Storyboard.TargetName="e7"/>
<DoubleAnimation RepeatBehavior="Forever" To="300"
Storyboard.TargetName="e8"/>
</Storyboard>
4、需要特別指出的關於動畫的屬性
DoubleAnimation, ColorAnimation, 和PointAnimation都有以下重要的屬性
From:指定開始值
To:指定結束值
By:指定位移量