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就无法解除锁定。
posted @ 2012-01-13 10:37  TMajier  阅读(590)  评论(0编辑  收藏  举报