新手WPF:动画是否删除附加属性?

时间:2014-11-19 13:06:50

标签: c# wpf animation attached-properties

我正在尝试学习WPF和动画。我有一个简单的程序,允许用户使用鼠标移动椭圆。释放鼠标按钮时,椭圆的位置将朝向屏幕顶部进行动画处理。

第一次抓住椭圆时这很好用。但是第二次抓住椭圆我不能再改变它的y位置(但我仍然可以改变x位置)。 动画是否会以某种方式移除附加的 Canvas.Top 属性?我该如何解决这个问题?

以下是启动动画的代码(位于MouseUp处理程序中)

Duration duration = new Duration(TimeSpan.FromSeconds(5.0*oldY/1000));

DoubleAnimation anim = new DoubleAnimation(oldY, 0, duration); // move to top of canvas

_shapeSelected.BeginAnimation(Canvas.TopProperty, anim);

这里是鼠标移动处理程序

    private void Canvas_MouseMove_1(object sender, MouseEventArgs e)
    {

        if (_shapeSelected != null)
        {
            Point pt = e.GetPosition(theCanvas);

            Canvas.SetLeft(_shapeSelected, (pt.X-_posOfMouseOnHit.X) + _posOfShapeOnHit.X );
            Canvas.SetTop(_shapeSelected,  (pt.Y-_posOfMouseOnHit.Y) + _posOfShapeOnHit.Y );

        }

    }

2 个答案:

答案 0 :(得分:1)

正如您在MSDN中的here中所看到的,动画设置的值(等级2)优先于本地值(等级3)。如果要再次手动设置值,则必须先停止或删除动画。 (另请参阅本网站上的“强制,动画和基本价值”部分)

答案 1 :(得分:1)

将动画FillBehavior设置为Stop。由于该属性现在在动画结束时恢复为当前local value,因此您还必须在动画开始后设置本地值。

var anim = new DoubleAnimation(oldY, 0, duration, FillBehavior.Stop);

_shapeSelected.BeginAnimation(Canvas.TopProperty, anim);
Canvas.SetTop(_shapeSelected, 0);