Ich bewerbe mich DoubleAnimation
auf das Framework-Element zur Laufzeit. Hier ist der Codeschnipsel:
foreach (FrameworkElement objInnerElement in objFrameWorkElement)
{
Point ElementPosition = new Point(Canvas.GetLeft(objInnerElement), Canvas.GetTop(objInnerElement));
DoubleAnimation db = new DoubleAnimation();
//db.From = objMoveIn.From;
db.AutoReverse = objMoveIn.AutoReverse;
if (objMoveIn.Repeat)
db.RepeatBehavior = RepeatBehavior.Forever;
db.Duration = TimeSpan.FromSeconds(objMoveIn.AnimationDuration);
Storyboard story = new Storyboard();
if (objMoveIn.ddlDirection.SelectedIndex == 0)
{
//(UIElement.RenderTransform).(TransformGroup.Children)[0].(TranslateTransform.X)
Storyboard.SetTargetProperty(db, new PropertyPath("(FrameworkElement.RenderTransform).(TranslateTransform.X)"));
//Storyboard.SetTargetProperty(db, new PropertyPath(TranslateTransform.XProperty));
db.From = 0 - ElementPosition.X;
db.To = 0;
}
else
{
Storyboard.SetTargetProperty(db, new PropertyPath("(FrameworkElement.RenderTransform).(TranslateTransform.Y)"));
//Storyboard.SetTargetProperty(db, new PropertyPath(TranslateTransform.YProperty));
db.From = 0 - ElementPosition.X;
db.To = 0;
}
story.Children.Add(db);
BeginStoryboard beginstoryboard = new BeginStoryboard();
beginstoryboard.Storyboard = story;
TranslateTransform oTransform = objInnerElement.RenderTransform as TranslateTransform;
if (oTransform == null)
{
oTransform = new TranslateTransform();
oTransform.X = 0;
oTransform.Y = 0;
objInnerElement.RenderTransform = oTransform;
}
if (objMoveIn.ddlDirection.SelectedIndex == 0)
oTransform.BeginAnimation(TranslateTransform.XProperty, db);
else
oTransform.BeginAnimation(TranslateTransform.YProperty, db);
Style objStyle = new Style();
EventTrigger objEventTrigger = new EventTrigger(FrameworkElement.LoadedEvent);
objEventTrigger.Actions.Add(beginstoryboard);
objStyle.Triggers.Add(objEventTrigger);
objInnerElement.Style = objStyle;
}
Animation funktioniert erfolgreich, aber mein Problem ist, dass, wenn ich versucht, XAML von diesem angewandten Framework-Element zu generieren
string shapestring = XamlWriter.Save(element);
StringReader stringReader = new StringReader(shapestring);
XmlTextReader xmlTextReader = new XmlTextReader(stringReader);
Element DeepCopyobject = (Element)XamlReader.Load(xmlTextReader);
wird der folgende Fehler ausgegeben:
{"Kann Zeichenkette 'RenderTransform.(TranslateTransform.X)' nicht konvertieren im Attribut 'TargetProperty' nach Objekt vom Typ 'System.Windows.PropertyPath'. Der Eigenschaftspfad ist nicht gültig. Kann nicht Typname auflösen TranslateTransform' auflösen. Fehler bei Objekt 'System.Windows.Media.Animation.DoubleAnimation',
Bitte helfen Sie mir.