WPF Storyboard动画不工作
问题描述:
我有我的自定义3D模型类(Model),其中包含Visual3D元素和Storyboard
(sb)以保存与该模型相关的动画。我试图旋转使用Storyboard
的Visual3D元素,但不幸的是它不起作用。WPF Storyboard动画不工作
这里是代码片段
public void AnimationRotate(Model model, double duration, double startTime, RepeatBehavior behaviour)
{
//Rotate transform 3D
RotateTransform3D rotateTransform = new RotateTransform3D();
//assign transform to the model
model.Visual3D.Transform = Transform3DHelper.CombineTransform(model.Visual3D.Transform, rotateTransform);
//define the rotation axis
AxisAngleRotation3D rotateAxis = new AxisAngleRotation3D(new Vector3D(0, 0, 1), 180);
//create 3D rotation animation
Rotation3DAnimation rotateAnimation = new Rotation3DAnimation(rotateAxis, TimeSpan.FromSeconds(0.5));
//rotation behaviour
rotateAnimation.RepeatBehavior = behaviour;
//start animation from time
rotateAnimation.BeginTime = TimeSpan.FromSeconds(startTime);
//begin animation - THIS WORKS FINE
// rotateTransform.BeginAnimation(RotateTransform3D.RotationProperty, rotateAnimation);
Storyboard.SetTargetProperty(rotateAnimation, new PropertyPath(RotateTransform3D.RotationProperty));
Storyboard.SetTarget(rotateAnimation, rotateTransform);
//add animation to the storyboard of the model
model.sb.Children.Add(rotateAnimation);
//BUT THIS APPROACH IS NOT WOKRING
model.sb.Begin();
}
答
问题在this answer进行说明。
而不是使用Storyboard.SetTarget
您需要为变换注册一个名称并呼叫Storyboard.SetTargetName
。此外,你必须调用Storyboard.Begin(FrameworkElement)并传递一个FrameworkElement作为参数(这里的this
)。
RegisterName("RotateTransform", rotateTransform);
Storyboard.SetTargetName(rotateAnimation, "RotateTransform");
...
model.sb.Begin(this);
而且我猜你需要的地方清除故事板的儿童,或创建每当动画开始一个新的故事板。
它工作。非常感谢克莱门斯花时间回复! – Raathigesh 2013-02-10 11:51:15