根据当前状态

时间:2015-06-08 11:48:25

标签: c# wpf xaml animation

我想使用DoubleAnimation为MouseOver上的双重DependencyProperty设置动画,具体取决于它的当前值。为了简单起见,我想说我想让ListBoxItem动画稍微向右移动,同时我将鼠标悬停在它上面并在移除鼠标时向后移动。

我首先在我的MouseOver-Trigger的<DoubleAnimation By="5"><DoubleAnimation By="-5">中定义EnterActionsExitActions。如果我将鼠标悬停在对象上足够长的时间,这可以正常工作,但如果我通过移动鼠标中断第一个动画,则第二个动画将比第一个动画运行更长时间。因此,在完成所有动画后,对象位置稍微偏离。

我可以在故事板中使用FillBehaviour="Stop"来修复所有动画完成后对象的状态。然而,这使得物体弹回到位,这显然看起来很刺激。

喜欢要做的是将To - 第二个DoubleAnimation中的属性指定为我的属性的原始值。这最初由Converter计算,因此我尝试将该属性绑定到已存在的Converter。由于线程问题导致错误(虽然我最初感到惊讶,谷歌很好地解释了原因)。我甚至发现了一个帖子(WPF animation: binding to the "To" attribute of storyboard animation)并且可以修改它以适应我的情况。然而,这感觉就像一个“hacky”解决方案。

问题:我觉得我不再那么直截了当了。我想要做的就是在鼠标悬停时“移动”一个对象并在之后“移动”它。有一个简单的方法吗?

1 个答案:

答案 0 :(得分:0)

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