根据当前状态动画双值



我想使用一个DoubleAnimation动画一个双- DependencyProperty在鼠标上方取决于它的当前值。为了简单起见,让我们假设我想动画一个ListBoxItem,当我将鼠标悬停在它上面时,它会稍微向右移动,当鼠标被移开时,它会向后移动。

我开始定义<DoubleAnimation By="5"><DoubleAnimation By="-5">在我的鼠标over - trigger的EnterActionsExitActions。如果我将鼠标悬停在对象上足够长的时间,这将有效,但如果我通过移动鼠标来中断第一个动画,则第二个动画将比第一个动画运行的时间更长。因此,在所有动画完成后,对象的位置稍微偏离。

我可以在故事板中使用FillBehaviour="Stop"来修复所有动画完成后对象的状态。然而,这使得物体弹回原位,这显然看起来相当令人恼火。

我想喜欢要做的是在第二个DoubleAnimation中指定To -属性为我的属性的原始值。这最初是由Converter计算的,所以我试图将该属性绑定到已经存在的Converter。由于线程问题,这会抛出一个错误(虽然我一开始很惊讶,但google解释得很好)。我甚至找到了一篇关于这个(WPF动画)的文章:绑定到"To"属性的故事板动画),也许可以修改它,以适应我的情况。然而,这感觉像是一个"黑客"的解决方案。

问题:我觉得我的想法不够直接了。我所要做的就是在鼠标悬停时"移动"一个对象,然后"移动"它回来。有简单的方法吗?

正如Sinatr在评论中指出的那样,在ExitActions中定义<DoubleAnimation>(跳过By="-5")就足够了。这将默认为初始值,而不是当前动画中使用的值。

最新更新