我有一个方法可以让我为与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));
寄宿生没有动画。我没有得到任何错误以太。
答案 0 :(得分:0)
不知怎的,我原本预计会出现错误,不管怎样,Border
没有这样的属性,如果你想移动你的控件,你需要设置RenderTransform
或LayoutTransform
边界为TranslateTransform
,然后您可以将变换本身作为目标传递给方法。
(整个故事板非常冗余,因为你只有一个动画,你可以在目标本身上调用BeginAnimation
)
答案 1 :(得分:0)
这与注册名称有关。我在here
中找到了一个链接我不知道registerName的方法是什么,但我想我需要它。从页面我设法得到基本的动画。我不能一次动画两件事有时候。 if you are interested in seeing the method take a look tat this question。我认为这是一个非常好的类,可以用代码创建动画。将命名空间复制到visual studio并复制我发布的第一个示例,以便您可以看到它是如何工作的。