WPF动画之后属性值无法改变

来源:互联网 发布:fluke网络测试仪 编辑:程序博客网 时间:2024/05/22 06:49

        前一段时间使用WPF2048游戏的时候,遇到下面的情形:使用按键对色块进行移动时,触发位置左边XY属性的DoubleAnimation动画,但是如果此时改变窗口的大小,并触发Canvas.SetLeft重新设置色块的位置时,发现色块没有更新到正确的位置上。

        通过调试发现,Canvas.SetLeft调用前后XY的数值并没有发生变化。

        最终在微软官网找到原因

        http://msdn.microsoft.com/zh-cn/library/aa970493(v=VS.100).aspx

        官方解释,某些情况下,对属性进行动画处理之后,无法修改该属性的值。

        也就是说,动画对数值进行了加锁,在解锁之前,其他代码无法对其进行修改。

        官网提供三种解决方法:

       1、 将动画的 FillBehavior 属性设置为 Stop

        2、移除整个演示图板。

        3、 从单个属性移除动画。

        第一种方式在动画结束之后,数值会恢复之前的值,所以最终需要重新设定该值。

        第二种方式通过使用 RemoveStoryboard 或 Storyboard.Remove移除Storyboard,直接消除其影响。

        第三种使用正在进行动画处理的对象的 BeginAnimation(DependencyProperty, AnimationTimeline) 方法。 将正进行动画处理的属性指定为第一个参数,将 null 指定为第二个参数。

        上面三种方法亲测可用。

 

 

0 0
原创粉丝点击