DoubleAnimation / Error while trying to generate XAML
I am using DoubleAnimation
for a structure element at runtime. Here's a snippet of code:
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;
}
The animation is working successfully, but my problem is when I tried to generate XAML from this frame applique
string shapestring = XamlWriter.Save(element);
StringReader stringReader = new StringReader(shapestring);
XmlTextReader xmlTextReader = new XmlTextReader(stringReader);
Element DeepCopyobject = (Element)XamlReader.Load(xmlTextReader);
it throws an error like below:
{"Unable to transform string" RenderTransform. (TranslateTransform.X) 'in the "TargetProperty" attribute an object of type' System.Windows.PropertyPath. Invalid property path. Can't name permission type 'TranslateTransform. Error in object 'System.Windows.Media.Animation.DoubleAnimation',
Please help me.
+2
source to share
1 answer
I couldn't exactly repeat the problem, but when I have markup like this:
<Canvas x:Name="canvas"
Grid.Row="1"
Grid.ColumnSpan="3">
<Rectangle Canvas.Left="10" Canvas.Top="10" Width="50"
Height="10"
RadiusX="5"
RadiusY="5"
Stroke="Black" Fill="AliceBlue" />
<Rectangle Canvas.Left="30"
Canvas.Top="100"
Width="50"
Height="10"
RadiusX="5"
RadiusY="5"
Stroke="Black"
Fill="Blue" />
<Rectangle Canvas.Left="200"
Canvas.Top="150"
Width="50"
Height="10"
RadiusX="5"
RadiusY="5"
Stroke="Black"
Fill="Green" />
</Canvas>
and a code like this:
foreach (FrameworkElement objInnerElement in canvas.Children)
{
Point ElementPosition = new Point(Canvas.GetLeft(objInnerElement), Canvas.GetTop(objInnerElement));
DoubleAnimation db = new DoubleAnimation();
db.RepeatBehavior = RepeatBehavior.Forever;
db.Duration = TimeSpan.FromSeconds(1000.0);
Storyboard story = new Storyboard();
Storyboard.SetTargetProperty(db, new PropertyPath("(FrameworkElement.RenderTransform).(TranslateTransform.X)"));
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;
}
oTransform.BeginAnimation(TranslateTransform.XProperty, db);
Style objStyle = new Style();
EventTrigger objEventTrigger = new EventTrigger(FrameworkElement.LoadedEvent);
objEventTrigger.Actions.Add(beginstoryboard);
objStyle.Triggers.Add(objEventTrigger);
objInnerElement.Style = objStyle;
}
string shapestring = XamlWriter.Save(canvas);
StringReader stringReader = new StringReader(shapestring);
XmlTextReader xmlTextReader = new XmlTextReader(stringReader);
UIElement DeepCopyobject = (UIElement)XamlReader.Load(xmlTextReader);
it works fine with no errors.
0
source to share