【问题标题】:DoubleAnimation / Error when trying to generate XAML尝试生成 XAML 时出现 DoubleAnimation / 错误
【发布时间】:2011-08-09 05:15:54
【问题描述】:

我在运行时在框架元素上应用DoubleAnimation。这是代码sn-p:

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

动画成功运行,但我的问题是当我尝试从这个应用的框架元素生成 XAML 时

string shapestring = XamlWriter.Save(element);
StringReader stringReader = new StringReader(shapestring);
XmlTextReader xmlTextReader = new XmlTextReader(stringReader);
Element DeepCopyobject = (Element)XamlReader.Load(xmlTextReader);

它会抛出如下错误:

{"无法转换字符串'RenderTransform.(TranslateTransform.X)' 在属性“TargetProperty”中 类型的对象 'System.Windows.PropertyPath'。 属性路径无效。不能 解析类型名称 '翻译转换'。对象错误 'System.Windows.Media.Animation.DoubleAnimation',

请帮帮我。

【问题讨论】:

  • 有专家吗?请帮帮我

标签: wpf animation


【解决方案1】:

我不能精确地重复一个问题,但是当我有这样的标记时:

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

还有这样的代码:

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

它工作正常,没有错误。

【讨论】:

    猜你喜欢
    • 2021-12-26
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    相关资源
    最近更新 更多