WPF TranslateTransform

时间:2011-07-30 18:01:27

标签: c# wpf animation transform

我试图使用TranslateTransform类在Y轴上的网格上移动图像。我需要这个动作是平滑的,所以我不能使用SetMargin或SetCanvas。我在后面的代码中尝试这个:

public void MoveTo(Image target, double oldY, double newY)
{
    var trans = new TranslateTransform();
    var anim2 = new DoubleAnimation(0, newY, TimeSpan.FromSeconds(2))
                    {EasingFunction = new SineEase()};
    target.RenderTransform = trans;
    trans.BeginAnimation(TranslateTransform.YProperty, anim2);
}

我想要使用的对象(图像控件)放在网格上。  一切都很好。 当我尝试使用相同的功能再次移动对象时出现问题。 对象(图像控件)首先移动到起始位置(初始Y坐标),然后动画开始。

TranslateTransform是否也没有改变坐标(在我的情况下是Margin属性)?

谢谢。

4 个答案:

答案 0 :(得分:1)

变换不会改变原始值。它们是你的起源点。如果您希望每次移动时都有新的原点,则可以处理动画完成事件。或者通过变换,您可以获得当前的偏移量,并将其作为动画的新起点。

换句话说,您的起始值始终是您最后一次转移到值

答案 1 :(得分:0)

TranslateTransform是一种特定的渲染转换。而不是改变控件的属性(例如Margin属性),它只会影响控件在屏幕上的显示方式。

答案 2 :(得分:0)

你明确地告诉动画从0开始。它正在做你告诉它的事情。 只需删除明确的零fromvalue,一切都会有效。

var anim2 = new DoubleAnimation(newY, TimeSpan.FromSeconds(2)) 
                { EasingFunction = new SineEase() };

答案 3 :(得分:0)

您必须使用DoubleAnimation的By属性。 试试这个:

//everytime you execute this anmation your object will be moved 2.0 further
double offset = 2.0 
var anim2 = new DoubleAnimation(newY, TimeSpan.FromSeconds(2));
anim2.To = null;
anim2.By = offset;