比如一个简单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就无法解除锁定。
本文介绍了WPF中DoubleAnimation的使用,包括设置动画起始值、目标值和持续时间,并将其应用到Canvas对象的不透明度属性上。在动画完成后,通过Completed事件恢复不透明度为1时,需要使用Storyboard的Begin方法传入true参数以允许控制,并在事件处理中调用Remove方法释放属性。注意Remove方法会消除现有动画效果,而不会停留在目标值。
4646

被折叠的 条评论
为什么被折叠?



