C# WPF中带有BeginAnimation的动画序列
我正在尝试使用WPF在3D中设置一些旋转的动画,如果我手动(单击)触发它们,一切都很好,但是如果我计算应在Viewport3D上进行的移动,所有动画似乎都会同时停止 计算移动的代码如下所示:C# WPF中带有BeginAnimation的动画序列,c#,wpf,animation,graphics,C#,Wpf,Animation,Graphics,我正在尝试使用WPF在3D中设置一些旋转的动画,如果我手动(单击)触发它们,一切都很好,但是如果我计算应在Viewport3D上进行的移动,所有动画似乎都会同时停止 计算移动的代码如下所示: for(int i=0; i<40; i++){ foo(i); } 轴和角度的计算并不是耗时的简单属性,因此我猜问题在于所有动画都会触发下一帧,因为当前帧“结束”时计算已经完成 如何以代码(而不是XAML)顺序显示这些动画,而不是一次显示所有动画 PS:所有内容都是C#,没有XAML。您可
for(int i=0; i<40; i++){
foo(i);
}
轴和角度的计算并不是耗时的简单属性,因此我猜问题在于所有动画都会触发下一帧,因为当前帧“结束”时计算已经完成
如何以代码(而不是XAML)顺序显示这些动画,而不是一次显示所有动画
PS:所有内容都是C#,没有XAML。您可以向a添加多个动画,并将每个动画的持续时间设置为以前动画的持续时间总和:
var storyboard = new Storyboard();
var totalDuration = TimeSpan.Zero;
for (...)
{
var rotation = new AxisAngleRotation3D(axis, angle);
var transform = new RotateTransform3D(rotation, new Point3D(0, 0, 0));
var duration = TimeSpan.FromMilliseconds(370);
var animation = new DoubleAnimation(0, angle, duration);
animation.BeginTime = totalDuration;
totalDuration += duration;
Storyboard.SetTarget(animation, rotation);
Storyboard.SetTargetProperty(animation, new PropertyPath(AxisAngleRotation3D.AngleProperty));
storyboard.Children.Add(animation);
}
storyboard.Begin();
请注意,我还没有测试上面的代码,因此对于任何错误,我深表歉意
或者,您创建动画的方式是,每个动画(从第二个动画开始)在前一个动画的处理程序中启动。您可以将多个动画添加到,并将每个动画的持续时间设置为前一个动画的持续时间之和:
var storyboard = new Storyboard();
var totalDuration = TimeSpan.Zero;
for (...)
{
var rotation = new AxisAngleRotation3D(axis, angle);
var transform = new RotateTransform3D(rotation, new Point3D(0, 0, 0));
var duration = TimeSpan.FromMilliseconds(370);
var animation = new DoubleAnimation(0, angle, duration);
animation.BeginTime = totalDuration;
totalDuration += duration;
Storyboard.SetTarget(animation, rotation);
Storyboard.SetTargetProperty(animation, new PropertyPath(AxisAngleRotation3D.AngleProperty));
storyboard.Children.Add(animation);
}
storyboard.Begin();
请注意,我还没有测试上面的代码,因此对于任何错误,我深表歉意
或者创建动画时,每个动画(从第二个动画开始)都是在前一个动画的处理程序中启动的。我得说这有点好,但动画仍然是分块进行的,我的意思是同时触发,一些触发器可以。那么在前一个完整的处理程序中启动每一个怎么样?我得说这会更好一些,但动画仍然是分块进行的,我的意思是一些触发器同时启动,一些触发器可以。那么在前一个完整的处理程序中启动每一个怎么样?