无法使用代码为TranslateTransform.XProperty设置动画

时间:2011-08-08 22:56:27

标签: c# wpf animation storyboard

我有一个方法可以让我为与DoubleAnimation有关的对象设置动画:

public void animDouble(DependencyObject target, DependencyProperty property, double to, TimeSpan duration, double? from = null, TimeSpan? beginTime = null, IEasingFunction e = null)
{

    DoubleAnimation animation = new DoubleAnimation();
    animation.To = to;

    if (beginTime == null)
        beginTime = TimeSpan.FromSeconds(0);

    if (from != null)
        animation.From = from;


    animation.BeginTime = beginTime;
    animation.Duration = duration;


    if (e != null)
        animation.EasingFunction = e;

    //start animating
    Storyboard.SetTarget(animation, target);  // what object will be animated?
    Storyboard.SetTargetProperty(animation, new PropertyPath(property)); // what property will be animated
    Storyboard sb = new Storyboard();
    sb.Children.Add(animation);
    sb.Begin();
}

所以,如果我有一个名为br1的寄宿生,我想为它的高度设置动画,我会将该方法称为:

animDouble(br1, FrameworkElement.HeightProperty, 150, TimeSpan.FromSeconds(5));

如果我想为它的宽度设置动画,我会这样做:

animDouble(br1, FrameworkElement.WidthProperty, 150, TimeSpan.FromSeconds(5));

我也可以使用相同的方法为其可见性设置动画。

由于某种原因,我无法为其x属性设置动画,以便沿x轴或y轴进行平移。当我将方法称为:

a.animDouble(br1, TranslateTransform.XProperty, 150, TimeSpan.FromSeconds(5));

寄宿生没有动画。我没有得到任何错误以太。

2 个答案:

答案 0 :(得分:0)

不知怎的,我原本预计会出现错误,不管怎样,Border没有这样的属性,如果你想移动你的控件,你需要设置RenderTransformLayoutTransform边界为TranslateTransform,然后您可以将变换本身作为目标传递给方法。

整个故事板非常冗余,因为你只有一个动画,你可以在目标本身上调用BeginAnimation

答案 1 :(得分:0)

这与注册名称有关。我在here

中找到了一个链接

我不知道registerName的方法是什么,但我想我需要它。从页面我设法得到基本的动画。我不能一次动画两件事有时候。 if you are interested in seeing the method take a look tat this question。我认为这是一个非常好的类,可以用代码创建动画。将命名空间复制到visual studio并复制我发布的第一个示例,以便您可以看到它是如何工作的。