Silverlight學習筆記(十)-----故事板storyboard實現動畫效果


  Storyboard是Silverlight動畫的基本單元,它用來分配動畫時間,可以使用同一個故事板對象產生一種或多種動畫效果,並且允許控制動畫的播放、暫停、停止以及在何時何地播放。

1 <Storyboard>
2 oneOrMoreChildTimelines
3 </Storyboard>

  其中oneOrMoreChildTimelines用來設置動畫效果,有3種形式

  1.ColorAnimation改變對象的填充色調)

  2.DoubleAnimation改變對象的任意一個屬性(double類型的))

  3.PointAnimation(改變對象的X、Y值,使控件的位置變化一次)





  在XAML頁面播放動畫的方法有兩種,一種是在XAML代碼中使用EventTrigger播放,另外一種是將故事板包括在Resources內,然后在后台代碼中引用故事板中的 x:Name,最后使用Begin方法來播放。(下面產生的效果是一樣的)

  1、XAML代碼中使用EventTrigger播放

 1 <Canvas Background="AliceBlue">
2 <Ellipse x:Name="ellipse" Fill="GreenYellow" Width="150" Height="200"></Ellipse>
3 <!-- XAML代碼中使用 EventTrigger -->
4 <Canvas.Triggers>
5 <!--創建觸發器,加載Canvas完畢之后觸發,播放動畫-->
6 <EventTrigger RoutedEvent="Canvas.Loaded">
7 <!--事件行為-->
8 <EventTrigger.Actions>
9 <BeginStoryboard>
10 <Storyboard>
11 <DoubleAnimation
12 Storyboard.TargetName="ellipse"
13 Storyboard.TargetProperty="Width"
14 From="100" To=" 300"
15 Duration="0:0:3"/>

16 </Storyboard>
17 </BeginStoryboard>
18 </EventTrigger.Actions>
19 </EventTrigger>
20 </Canvas.Triggers>
21 </Canvas>

  
  2、將故事板包括在Resources內

 1 <UserControl x:Class="Storyboard.MainPage"
2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
6 mc:Ignorable="d"
7 d:DesignHeight="300" d:DesignWidth="640">

8 <!-- 將故事板包括在Resources內 -->
9 <UserControl.Resources>
10 <Storyboard x:Name="sbd">
11 <DoubleAnimation Storyboard.TargetName="ellipse"
12 Storyboard.TargetProperty="Width"
13 From="150" To=" 300"
14 Duration="0:0:3">

15
16 </DoubleAnimation>
17 </Storyboard>
18 </UserControl.Resources>
19 <Canvas x:Name="canvas" Background="AliceBlue">
20 <Ellipse x:Name="ellipse" Fill="YellowGreen"
21 Width="150" Height="200">

22
23 </Ellipse>
24 </Canvas>
25 </UserControl>
 1 namespace Storyboard
2 {
3 public partial class MainPage : UserControl
4 {
5 public MainPage()
6 {
7 InitializeComponent();
8 sbd.Begin();
9 }
10 }
11 }

  
  DoubleAnimation動畫:動畫實現進度條效果

 1 <Canvas x:Name="canvas">
2 <Rectangle x:Name="rect" Canvas.Top="100" Canvas.Left="80"
3 Width="0" Height="80"
4 Stroke="DarkGray" StrokeThickness="5">

5 <Rectangle.Fill>
6 <!-- 鞏固畫刷漸變 -->
7 <LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">
8 <GradientStop Color="YellowGreen" Offset="1.0"></GradientStop>
9 <GradientStop Color="White" Offset="0.0"></GradientStop>
10 </LinearGradientBrush>
11 </Rectangle.Fill>
12 </Rectangle>
13 <TextBlock Canvas.Top="120" Canvas.Left="20" Text="0%" FontSize="30"></TextBlock>
14 <TextBlock Canvas.Top="120" Canvas.Left="300" Text="100%" FontSize="30"></TextBlock>
15 <!-- 創建觸發器 -->
16 <Canvas.Triggers>
17 <!-- 事件通道 -->
18 <EventTrigger RoutedEvent="Canvas.Loaded">
19 <EventTrigger.Actions>
20 <BeginStoryboard>
21 <Storyboard>
22 <!-- RepeatBehavior 用來說明動畫的重復次數-->
23 <DoubleAnimation Storyboard.TargetName="rect" Storyboard.TargetProperty="Width"
24 From="1" To="210" Duration="0:0:5"
25 RepeatBehavior="Forever"></DoubleAnimation>

26 </Storyboard>
27 </BeginStoryboard>
28 </EventTrigger.Actions>
29 </EventTrigger>
30 </Canvas.Triggers>
31 </Canvas>

        

  
  ColorAnimation動畫效果(同時也實現了DoubleAnimation):在橢圓沿旋轉中心不斷改變Angle值進行旋轉過程中,實現ColorAnimation填充顏色的不斷變化。

1 public partial class RotateTransform : UserControl
2 {
3 public RotateTransform()
4 {
5 InitializeComponent();
6 sbd.Begin();
7 }
8 }

 

 1 <!-- storyboard嵌到Resources內 -->
2 <UserControl.Resources>
3 <Storyboard x:Name="sbd">
4 <!-- DoubleAnimation數值變換,實現橢圓的旋轉變化 -->
5 <DoubleAnimation Storyboard.TargetName="ellipse" Storyboard.TargetProperty="(Ellipse.RenderTransform).(RotateTransform.Angle)"
6 From="0" To="360"
7 Duration="0:0:6" RepeatBehavior="forever"></DoubleAnimation>

8 <!-- ColorAnimation顏色變換,在橢圓旋轉的過程時,實現顏色的變換-->
9 <ColorAnimation Storyboard.TargetName="ellipse" Storyboard.TargetProperty="(Ellipse.Fill).(SolidColorBrush.Color)"
10 From="YellowGreen" To="Red"
11 Duration="0:0:6" RepeatBehavior="forever"></ColorAnimation>

12 </Storyboard>
13 </UserControl.Resources>
14 <Canvas x:Name="canvas">
15 <Ellipse x:Name="ellipse" Canvas.Top="180" Canvas.Left="180" Width="20" Height="80"
16 Fill="YellowGreen" Stroke="Black" StrokeThickness="1">

17 <!-- 設置好橢圓的旋轉中心-->
18 <Ellipse.RenderTransform>
19 <RotateTransform Angle="0" CenterX="10" CenterY="-20"></RotateTransform>
20 </Ellipse.RenderTransform>
21 </Ellipse>
22 </Canvas>

    效果截圖:
            

    PointAnimation:改變籃球的X、Y軸坐標,實現垂直下降效果

 1 <Canvas Background="AliceBlue">
2 <Path Canvas.Left="100">
3 <Path.Data>
4 <EllipseGeometry x:Name="ellipseGeometry" Center="0,0"
5 RadiusX="50" RadiusY="50">

6 </EllipseGeometry>
7 </Path.Data>
8 <Path.Fill>
9 <ImageBrush ImageSource="basketball.jpg"></ImageBrush>
10 </Path.Fill>
11 <Path.Triggers>
12 <EventTrigger RoutedEvent="Path.Loaded">
13 <BeginStoryboard>
14 <Storyboard>
15 <PointAnimation Storyboard.TargetName="ellipseGeometry" Storyboard.TargetProperty="Center"
16 Duration="0:0:5" From="50,50" To="50,200"
17 RepeatBehavior="forever"></PointAnimation>

18 </Storyboard>
19 </BeginStoryboard>
20 </EventTrigger>
21 </Path.Triggers>
22 </Path>
23 </Canvas>

  循例來張圖,不過看不出任何效果。。。。。。

              



  
  小總結一下:三種線性插值動畫用法如出一轍,只要記住幾個屬性就可以實現基本的應用了。

    Storyboard.TargetName:附加屬性操作到指定的對象上;
    Storyboard.TargetProperty:要操作指定對象的屬性;
    From..To :上述屬性值的起始范圍;
    Duration: 在多少時間內完成上述屬性值的變化;
    RepeatBehavior:反復次數


---------------------------------------------------------完美分割線---------------------------------------------------------------------------------

                  爭取明天能夠學習並完成那個類似 Mac Dock 的Silverlight小項目。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM