我在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();
}
但这不起作用,没有任何反应。
答案 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