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







All Articles