Wpf-Animationen von code
Gab es einige ähnliche threads, aber ich finde nicht die Lösung auf mein problem. Es ist mein Erster post hier.
Hier ist das Ding:
Viewport3D viewPort3D;
GeometryModel3D geometryModel = new GeometryModel3D();
Transform3DGroup transform3DGroup = new Transform3DGroup();
...
//Rotation
RotateTransform3D rotateTransform3D = new RotateTransform3D();
AxisAngleRotation3D axisAngleRotation3d = new AxisAngleRotation3D();
axisAngleRotation3d.Axis = new Vector3D(0, 1, 0);
axisAngleRotation3d.Angle = angle;
rotateTransform3D.Rotation = axisAngleRotation3d;
transform3DGroup.Children.Add(rotateTransform3D);
//Translation
TranslateTransform3D translateTransform3D = new TranslateTransform3D();
translateTransform3D.OffsetX = offsetX;
transform3DGroup.Children.Add(translateTransform3D);
//Adding transforms
geometryModel.Transform = transform3DGroup;
Model3DGroup model3DGroup = new Model3DGroup();
model3DGroup.Children.Add( image.getGeometryModel3D() );
modelVisual3D.Content = model3DGroup;
viewPort3D.Children.Add( modelVisual3D );
Und jetzt möchte ich die übersetzung mit storyboard (weil ich später hinzufügen wollen auch drehen, um das storyboard):
Storyboard s = new Storyboard();
Transform3DGroup transform3DGroup = model3DGroup.Children.ElementAt(current).Transform as Transform3DGroup;
for (int j = 0; j < transform3DGroup.Children.Count; ++j)
{
if (transform3DGroup.Children.ElementAt(j) is TranslateTransform3D)
{
TranslateTransform3D translation = transform3DGroup.Children.ElementAt(j) as TranslateTransform3D;
DoubleAnimation doubleAnimation = new DoubleAnimation();
doubleAnimation.From = 0;
doubleAnimation.To = 2;
doubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(1));
doubleAnimation.AutoReverse = true;
doubleAnimation.RepeatBehavior = RepeatBehavior.Forever;
s.Children.Add(doubleAnimation);
s.Duration = new Duration(TimeSpan.FromSeconds(1));
Storyboard.SetTarget(doubleAnimation, model3DGroup.Children.ElementAt(current));
Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("(Model3D.Transform).(Transform3DGroup.Children)[1].(TranslateTransform3D.OffsetX)"));
s.Begin(); //Exception during the execution.
}
}
Ausnahme in der letzten Zeile:
'[Unbekannt]' - Eigenschaft-Wert in das Pfad
'(Model3D.Transformieren).(Transform3DGroup.Kinder)[1].(TranslateTransform3D.OffsetX)'
Punkte an unverrückbare Instanz
'System.Windows.Media.Media3D.TranslateTransform3D'.
Nahm ich PropertyPath-ähnlich dem Pfad erzeugt in blend 4.
Danke für jede Hilfe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Denke ich da übersetzen Transform 3d ist eine unveränderliche Instanz, es muss angezeigt werden, dass es wandelbar ist, während rendering /translation stattfindet.
Ich denke,
Liefern wir
x:Name
zu, die unveränderlichTranslateTransform3D
Objekt, um es verändert werden.Binden seiner Eigenschaft, als zu animieren.
E. g. in Ihrem Fall
Diese Weise geben wir die Namen der Achse 3D-Rotation und Translate Verwandeln Sie 3D Objekte und dann in double-Animationen finden Sie als
Storyboard.SetTargetName(.., "AxisRotation")
undStoryboard.SetTargetName(.., "TranslateTransformation")
und direkten Zugriff auf Ihre Eigenschaften wieStoryboard.SetTargetProperty(.., new PropertyPath("Angle"))
undStoryboard.SetTargetProperty(.., new PropertyPath("OffsetX"))
resp.Ihre Fehler besagt, dass
TranslateTransform3D
unveränderlich ist, was bedeutet, es kann nicht geändert werden. Und Sie versuchen, zu animieren, zu Ihren Eigenschaften, daher kam der Fehler.