WPF Storyboard的属性锁定问题

比如一个简单DoubleAnimation动画:
myDA = new DoubleAnimation();
myDA.From = this.myObject.Opacity;
myDA.To = 0.1;
myDA.Duration = new Duration(TimeSpan.FromMilliseconds(600));

Storyboard.SetTargetName(myDA, "myObject");
Storyboard.SetTargetProperty(myDA, new PropertyPath(Canvas.OpacityProperty));

mySB = new Storyboard(); 
mySB.Children.Add(myDA);
mySB.Completed += new EventHandler(mySB_Completed);
mySB.Begin(myObject);

Completed事件:
void mySB_Completed(object sender, EventArgs e)
{
myObject.Opacity = 1;
}

透明度为0的动画结束后,在Completed事件中再设为1,程序运行后无效果。

解决方法:

mySB.Begin(myObject);
改成
mySB.Begin(myObject,true);

再在结束事件中加上:
mySB.Remove(myObject);
myObject.Opacity = 1;

就没问题了,因为当一个属性作为Animation时,相应属性就会被锁住,需要用Remove释放掉。而如果想控制StoryBoard,则必须在Begin()时加true参数。
需要注意两点:1.在Remove的同时,已有的Animaition效果会消失掉,而不是停在动画目标值。
2.这个方法只能用于StoryBoard,如果只写DoubleAnimaition就无法解除锁定。

转载于:https://www.cnblogs.com/majier/archive/2012/01/13/2781817.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值