[Windows 8 App]Storyboard------關鍵影格動畫(ObjectAnimationUsingKeyFrames)

[Windows 8 App]Storyboard------關鍵影格動畫(ObjectAnimationUsingKeyFrames)

 

ObjectAnimationUsingKeyFrames關鍵影格動畫透過控制Object類型的屬性值來達到相應的動畫效果

可以包含一個或多個DiscreteObjectKeyFrame元素,從而使動畫呈現一種非連續的變化效果

下面將透過範例來介紹ObjectAnimationUsingKeyFrames

 

首先,新增一個專案【ObjectAnimationUsingKeyFrames】

開啟【MainPage.xaml】,這是【MainPage.xaml】的程式碼

 


<Page
    x:Class="ObjectAnimationUsingKeyFrames.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:ObjectAnimationUsingKeyFrames"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        <StackPanel>
            <StackPanel.Resources>
                <Storyboard x:Name="storyboard">
                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="AnimatedRectangle" Storyboard.TargetProperty="Fill" Duration="0:0:3" RepeatBehavior="Forever" >
                        <ObjectAnimationUsingKeyFrames.KeyFrames>
                            <DiscreteObjectKeyFrame KeyTime="0:0:1">
                                <DiscreteObjectKeyFrame.Value>
                                    <LinearGradientBrush>
                                        <LinearGradientBrush.GradientStops>
                                            <GradientStop Color="Yellow" Offset="0.0" />
                                            <GradientStop Color="Orange" Offset="0.1" />
                                            <GradientStop Color="Red" Offset="2.0" />                                            
                                        </LinearGradientBrush.GradientStops>
                                    </LinearGradientBrush>
                                </DiscreteObjectKeyFrame.Value>
                            </DiscreteObjectKeyFrame>
                            <DiscreteObjectKeyFrame KeyTime="0:0:2">
                                <DiscreteObjectKeyFrame.Value>
                                    <LinearGradientBrush>
                                        <LinearGradientBrush.GradientStops>
                                            <GradientStop Color="White" Offset="0.0" />
                                            <GradientStop Color="MediumBlue" Offset="0.1" />
                                            <GradientStop Color="Black" Offset="1.0" />              
                                        </LinearGradientBrush.GradientStops>
                                    </LinearGradientBrush>
                                </DiscreteObjectKeyFrame.Value>
                            </DiscreteObjectKeyFrame>
                        </ObjectAnimationUsingKeyFrames.KeyFrames>
                    </ObjectAnimationUsingKeyFrames>
                </Storyboard>
            </StackPanel.Resources>
        </StackPanel>
        <Rectangle x:Name="AnimatedRectangle" Loaded="Rectangle_Loaded" Width="400" Height="400" /> 
    </Grid>
</Page>

 

上面的程式碼中,先添加一個StackPanel元素,並在StackPanel元素的StackPanel.Resources中添加一個動畫資源Storyboard元素

並對Storyboard命名為storyboard,在Storyboard元素中添加一個關鍵影格ObjectAnimationUsingKeyFrames

並使用TargetProperty屬性指定動畫控制的屬性為Fill

同時透過Duration屬性設定動畫週期為3秒,設置RepeatBehavior屬性值為Forever

ObjectAnimationUsingKeyFrames添加兩個DiscreteObjectKeyFrame關鍵影格

透過KeyTime屬性設置第一個關鍵影格動畫開始時間為第一秒

第二個關鍵影格動畫開始時間為第二秒

同時每個關鍵影格都指定一個含有三種顏色的漸變色

然後,添加一個名為AnimatedRectangle的Rectangle元素

並添加一個名為Rectangle_Loaded的Loaded事件

最後設置Storyboard元素TargetName屬性值為AnimatedRectangle

將關鍵影格動畫效果定位到Rectangle元素上

 

接下來開啟【MainPage.xaml.cs】,在Rectangle_Loaded事件中輸入以下程式碼:


private void Rectangle_Loaded(object sender, RoutedEventArgs e)
{
    storyboard.Begin();
}

以上Rectangle_Loaded事件處理方法透過呼叫storyboard對象的Begin方法實現啟動關鍵影格動畫的操作

 

這是專案的執行畫面:

321

 

320

 

專案執行的設計畫面