WPF动画

首先一个简单动画的定义过程

 //1.创建动画对象</span>

DoubleAnimation doubleAnimation = new DoubleAnimation();

doubleAnimation.From = 10;//设置开始值

doubleAnimation.To = 100;//设置结束值

doubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(5));//动画运行时间

doubleAnimation.AutoReverse = true;//设置动画播放完后反向在播放

doubleAnimation.RepeatBehavior = RepeatBehavior.Forever;//设置为循环播放

doubleAnimation.FillBehavior = FillBehavior.HoldEnd;//在动画结束时保持大小

//doubleAnimation.FillBehavior = FillBehavior.Stop;//在动画结束时恢复原值


//2.创建故事板 并把动画对象加入到该故事板中

Storyboard storyboard  = new Storyboard();

storyboard.Children.Add(doubleAnimation);

//3. 指定要执行该故事板的对象

Storyboard.SetTarget(doubleAnimation,name);//指定要执行动画的对象。

//4.指定要进行动画处理的属性

Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("(Canvas.Top)"));

storyboard.Begin();//开始动画



 Storyboard.SetTarget(doubleAnimation, name);设置doubleAniamtion的作用对象是名为name的对象,注意到传入的第二个参数是一个字符串name,那么我们的程序怎么知道name这个字符串就是指我们的动画呢,这里存在一个名称与对象的映射,即我们的name映射到具体对象,为了构造这个映射我们涉及到了NameScope(名字域)这个概念.
            NameScope.SetNameScope(thisnew NameScope());                      
            
this.RegisterName(name, nameObject);
上面的代码中,this设置了一个名字域,nameObject向这个名字域注册了自己的名字,
这样我们的程序就可以通过this的名字域来查找到nameObject与name之间的映射关系了
storyboard.Begin(this);

属性链
DependencyProperty[] propertyChain = new DependencyProperty[]
{
<span style="white-space:pre">	</span>Button.RenderTransformProperty,
<span style="white-space:pre">	</span>TranslateTransform.XProperty
};

Storyboard.SetTargetProperty(xAnimation, new PropertyPath("(0).(1)", propertyChain));
为了构造PropertyChain,我们先定义一个DependencyProperty的数组,注意数组的元素是怎么来的,它按照属性链的"链条"关系依次书写,直到到达我们最终要修改的属性,(由于我们是通过将RenderTransformProperty设置为TranslateTransform类型,所以第二个元素是TranslateTransform.XProperty),简单地说就是(类型1.属性1,类型2.属性2,....类型n.属性n),其中类型i是属性i-1的类型或可以与之转换的类型.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值