silverlight中用代码动态控制Storyboard(动画)属性的三种方法

先准备一个基本的xaml页面

silverlight中用代码动态控制Storyboard(动画)属性的三种方法silverlight中用代码动态控制Storyboard(动画)属性的三种方法Code
 1silverlight中用代码动态控制Storyboard(动画)属性的三种方法<navigation:Page 
 2silverlight中用代码动态控制Storyboard(动画)属性的三种方法           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
 3silverlight中用代码动态控制Storyboard(动画)属性的三种方法           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
 4silverlight中用代码动态控制Storyboard(动画)属性的三种方法           xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
 5silverlight中用代码动态控制Storyboard(动画)属性的三种方法           xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
 6silverlight中用代码动态控制Storyboard(动画)属性的三种方法           mc:Ignorable="d"
 7silverlight中用代码动态控制Storyboard(动画)属性的三种方法           xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
 8silverlight中用代码动态控制Storyboard(动画)属性的三种方法           x:Class="Projection.Test.TestPage"
 9silverlight中用代码动态控制Storyboard(动画)属性的三种方法           d:DesignWidth="640" d:DesignHeight="480"
10silverlight中用代码动态控制Storyboard(动画)属性的三种方法           Title="TestPage Page">
11silverlight中用代码动态控制Storyboard(动画)属性的三种方法    <navigation:Page.Resources>
12silverlight中用代码动态控制Storyboard(动画)属性的三种方法        
13silverlight中用代码动态控制Storyboard(动画)属性的三种方法        <Storyboard x:Name="storyTest">
14silverlight中用代码动态控制Storyboard(动画)属性的三种方法            
15silverlight中用代码动态控制Storyboard(动画)属性的三种方法            <!--绕y轴旋转,从0到360,再转到720度-->
16silverlight中用代码动态控制Storyboard(动画)属性的三种方法            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="img" Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationY)">
17silverlight中用代码动态控制Storyboard(动画)属性的三种方法                <EasingDoubleKeyFrame KeyTime="00:00:01" Value="360"/>
18silverlight中用代码动态控制Storyboard(动画)属性的三种方法                <EasingDoubleKeyFrame KeyTime="00:00:02" Value="720"/>
19silverlight中用代码动态控制Storyboard(动画)属性的三种方法            </DoubleAnimationUsingKeyFrames>
20silverlight中用代码动态控制Storyboard(动画)属性的三种方法            
21silverlight中用代码动态控制Storyboard(动画)属性的三种方法            <!--宽度按比例放大缩小,先放大到4位,再还原-->
22silverlight中用代码动态控制Storyboard(动画)属性的三种方法            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="img" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
23silverlight中用代码动态控制Storyboard(动画)属性的三种方法                <EasingDoubleKeyFrame KeyTime="00:00:01" Value="4"/>
24silverlight中用代码动态控制Storyboard(动画)属性的三种方法                <EasingDoubleKeyFrame KeyTime="00:00:02" Value="1"/>
25silverlight中用代码动态控制Storyboard(动画)属性的三种方法            </DoubleAnimationUsingKeyFrames>
26silverlight中用代码动态控制Storyboard(动画)属性的三种方法            
27silverlight中用代码动态控制Storyboard(动画)属性的三种方法            <!--高度按比例放大缩小,先放大到4位,再还原-->
28silverlight中用代码动态控制Storyboard(动画)属性的三种方法            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="img" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)">
29silverlight中用代码动态控制Storyboard(动画)属性的三种方法                <EasingDoubleKeyFrame KeyTime="00:00:01" Value="4"/>
30silverlight中用代码动态控制Storyboard(动画)属性的三种方法                <EasingDoubleKeyFrame KeyTime="00:00:02" Value="1"/>
31silverlight中用代码动态控制Storyboard(动画)属性的三种方法            </DoubleAnimationUsingKeyFrames>            
32silverlight中用代码动态控制Storyboard(动画)属性的三种方法            
33silverlight中用代码动态控制Storyboard(动画)属性的三种方法            <!--不透明度变化,从1到0.1,再还原为1-->
34silverlight中用代码动态控制Storyboard(动画)属性的三种方法            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="img" Storyboard.TargetProperty="(UIElement.Opacity)">
35silverlight中用代码动态控制Storyboard(动画)属性的三种方法                <EasingDoubleKeyFrame KeyTime="00:00:01" Value="0.1"/>
36silverlight中用代码动态控制Storyboard(动画)属性的三种方法                <EasingDoubleKeyFrame KeyTime="00:00:02" Value="1"/>
37silverlight中用代码动态控制Storyboard(动画)属性的三种方法            </DoubleAnimationUsingKeyFrames>
38silverlight中用代码动态控制Storyboard(动画)属性的三种方法        </Storyboard>
39silverlight中用代码动态控制Storyboard(动画)属性的三种方法        
40silverlight中用代码动态控制Storyboard(动画)属性的三种方法    </navigation:Page.Resources>
41silverlight中用代码动态控制Storyboard(动画)属性的三种方法    <Grid x:Name="LayoutRoot">
42silverlight中用代码动态控制Storyboard(动画)属性的三种方法
43silverlight中用代码动态控制Storyboard(动画)属性的三种方法        <Image x:Name="img" Source="/Projection;Component/img/img0.jpg" Width="100" HorizontalAlignment="Center" VerticalAlignment="Center" RenderTransformOrigin="0.5,0.5">
44silverlight中用代码动态控制Storyboard(动画)属性的三种方法            <Image.RenderTransform>
45silverlight中用代码动态控制Storyboard(动画)属性的三种方法                <TransformGroup>
46silverlight中用代码动态控制Storyboard(动画)属性的三种方法                    <ScaleTransform/>
47silverlight中用代码动态控制Storyboard(动画)属性的三种方法                    <SkewTransform/>
48silverlight中用代码动态控制Storyboard(动画)属性的三种方法                    <RotateTransform/>
49silverlight中用代码动态控制Storyboard(动画)属性的三种方法                    <TranslateTransform/>
50silverlight中用代码动态控制Storyboard(动画)属性的三种方法                </TransformGroup>
51silverlight中用代码动态控制Storyboard(动画)属性的三种方法            </Image.RenderTransform>
52silverlight中用代码动态控制Storyboard(动画)属性的三种方法            <Image.Projection>
53silverlight中用代码动态控制Storyboard(动画)属性的三种方法                <PlaneProjection/>
54silverlight中用代码动态控制Storyboard(动画)属性的三种方法            </Image.Projection>
55silverlight中用代码动态控制Storyboard(动画)属性的三种方法            <Image.Effect>
56silverlight中用代码动态控制Storyboard(动画)属性的三种方法                <DropShadowEffect/>
57silverlight中用代码动态控制Storyboard(动画)属性的三种方法            </Image.Effect>
58silverlight中用代码动态控制Storyboard(动画)属性的三种方法        </Image>
59silverlight中用代码动态控制Storyboard(动画)属性的三种方法
60silverlight中用代码动态控制Storyboard(动画)属性的三种方法    </Grid>
61silverlight中用代码动态控制Storyboard(动画)属性的三种方法</navigation:Page>

结构不复杂,里面就放了一张图片,同时预置了一个动画storyTest,里面把几种常见的动画形式都列在里面了,下面就来看看如何动态改变storyTest动画的属性(比如改变旋转的起始角度之类)

1.直接加x:Name,然后引用赋值

1silverlight中用代码动态控制Storyboard(动画)属性的三种方法<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="img" Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationY)">
2silverlight中用代码动态控制Storyboard(动画)属性的三种方法    <EasingDoubleKeyFrame KeyTime="00:00:01" Value="360" x:Name="yFrom"/>
3silverlight中用代码动态控制Storyboard(动画)属性的三种方法    <EasingDoubleKeyFrame KeyTime="00:00:02" Value="720" x:Name="yTo"/>
4silverlight中用代码动态控制Storyboard(动画)属性的三种方法</DoubleAnimationUsingKeyFrames>
5silverlight中用代码动态控制Storyboard(动画)属性的三种方法

注意高亮部分,然后象这样引用

System.Windows.Media.Animation.EasingDoubleKeyFrame yFrom = this.FindName("yFrom"as System.Windows.Media.Animation.EasingDoubleKeyFrame;

yFrom.Value 
= 20;

这样我们就把00:00:01秒时角度由360改为20度了

2.利用StoryBoard的Children属性

 DoubleAnimationUsingKeyFrames _rotate = storyTest.Children[0as DoubleAnimationUsingKeyFrames;
 _rotate.KeyFrames[
0].Value = 90;//修改旋转角度的值
 _rotate.KeyFrames[1].Value = 180;

 storyTest.RepeatBehavior 
= RepeatBehavior.Forever;//指定为一直播放
 
//this.storyTest.RepeatBehavior = new RepeatBehavior(2);//播放2次

这样我们就把旋转的角度值从360,720改为90,180了

说明:StoryBoard的Children属性得到的是一个Timeline的集合,而DoubleAnimationUsingKeyFrames等这些基本的关键帧类型都是继承自Timeline,因此可以用as安全的把Timeline向下转化为DoubleAnimationUsingKeyFrames

3.动态添加/删除关键帧

当xaml中预定义的关键帧不满足要求时,这种方法就几乎成了唯一选择

storyTest.Children.Clear();//清除原来的动画设定,仅保留一个空壳           

DoubleAnimationUsingKeyFrames _new_rotate 
= new DoubleAnimationUsingKeyFrames();

EasingDoubleKeyFrame _frame1 
= new EasingDoubleKeyFrame();
_frame1.Value 
= 180;
_frame1.KeyTime 
= new TimeSpan(0001);

EasingDoubleKeyFrame _frame2 
= new EasingDoubleKeyFrame();
_frame2.Value 
= 0;
_frame2.KeyTime 
= new TimeSpan(0002);


EasingDoubleKeyFrame _frame3 
= new EasingDoubleKeyFrame();
_frame3.Value 
= 90;
_frame3.KeyTime 
= new TimeSpan(0005);

_new_rotate.KeyFrames.Add(_frame1);
_new_rotate.KeyFrames.Add(_frame2);
_new_rotate.KeyFrames.Add(_frame3);

storyTest.Children.Add(_new_rotate);

Storyboard.SetTarget(_new_rotate, 
this.img);
Storyboard.SetTargetProperty(_new_rotate, 
new PropertyPath("(UIElement.Projection).(PlaneProjection.RotationY)"));

storyTest.AutoReverse 
= false;

//storyTest.FillBehavior = FillBehavior.Stop;//加入这一行后,不管AutoReverse设置为何值,都会回复原状            

storyTest.Begin();

在这里我们把原来storyTest中的动画设定全部清空 了,同时增加了一个三帧的动画

欢迎转载,但请注明来自菩提树下的杨过(http://yjmyzz.cnblogs.com/)

上一篇:windows server 下使用gpfdist 并行导入数据到 greenplum集群


下一篇:《Greenplum5.0 最佳实践》 系统监控与维护 (五)