2 Stimmen

DoubleAnimation / Fehler beim Versuch, XAML zu generieren

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.

0voto

Y.Yanavichus Punkte 2378

Ich konnte ein Problem nicht genau wiederholen, aber wenn ich eine solche Markierung habe:

    <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>

und solchen Code:

       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);

es funktioniert einwandfrei, ohne Fehler.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X