WPF中元素的同时动画

时间:2014-01-14 09:17:12

标签: c# wpf animation user-interface rotation

我在3D中根据WPF动画提出了一个问题。

在我的用户控件中,有一些动态数量的wpf元素在后面的代码中创建。它们围绕y轴圆形定位。

我用初始角度创建每个元素:

var trans = new AxisAngleRotation3D();
trans.Axis = new Vector3D(0, 1, 0);
trans.Angle = initialAngleFromZero;
RotateTransform3D elementTransform = new RotateTransform3D(trans);
wpfElement.Transform = elementTransform;

然后根据需要显示每个元素。

现在,我想在后面的代码中同时围绕y轴旋转所有动态创建的对象相同的角度。我怎么样?我尝试过以下方法:

foreach(var wpfElement in wpfElements)
{
   var sb = new Storyboard();
   var ani = new DoubleAnimation();
   ani.Duration = new Duration(TimeSpan.FromSeconds(5));
   ani.From = fromAngle;
   ani.To = toAngle;
   sb.Children.Add(ani);
   Storyboard.SetTarget(ani, wpfElement.Transform);
   Storyboard.SetTargetProperty(ani, new PropertyPath(AxisAngleRotation3D.AngleProperty));
   sb.Begin();
}

但这不起作用,没有任何反应。

1 个答案:

答案 0 :(得分:0)

要像这样制作组动画,或者一次动画多个对象,您可能会发现通过开发自定义Panel可以获得更多成功...您可以将动画直接构建到其中并且一旦开发,您只需将其设置为UI集合控件的ItemsPanel,并添加项目以查看其动画。我有几个像这样使用它们:

<ListBox ItemSource="{Binding SomeCollection}">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <Controls:AnimatedRotationPanel EntryAnimationType="Slide" 
EntryAnimationDirection="Up" HorizontalContentAlignment="Stretch" 
ExitAnimationType="Slide" ExitAnimationDirection="Down" />
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
</ListBox>

正如您所看到的,我在Panel添加了额外的属性以在使用时提供更多选项,但您可以根据需要使其变得简单或复杂。为了帮助您开发这些Panel,请查看以下链接,请不要被一开始看起来像一些具有挑战性的代码:

  来自MSDN的

Panels Overview
  WPF Tutorial.NET上的How to create a Custom Layout Panel in WPF
  来自CodeProject的Creating Custom Panels In WPF
  来自CodeProject的Animated WPF Panels