C# 倾斜动画无法设置动画

C# 倾斜动画无法设置动画,c#,wpf,exception,animation,C#,Wpf,Exception,Animation,我在将我的倾斜动画翻译成双动画类方面取得了进展。剩下的唯一问题是,当调度计时器调用动画时,会抛出一个错误。错误如下 无法对“System.Windows.Media.MatrixTransform”上的“AngleX”属性设置动画,因为该对象已被密封或冻结 如何克服此错误以使动画能够工作 public static void Grass(Canvas canvas, int boundry) { foreach (var element in canvas.Chi

我在将我的倾斜动画翻译成双动画类方面取得了进展。剩下的唯一问题是,当调度计时器调用动画时,会抛出一个错误。错误如下

无法对“System.Windows.Media.MatrixTransform”上的“AngleX”属性设置动画,因为该对象已被密封或冻结

如何克服此错误以使动画能够工作

    public static void Grass(Canvas canvas, int boundry)
    {
        foreach (var element in canvas.Children.OfType<Image>())
        {
            if (element.Name == "GrassForeground" || element.Name == "GrassBackground")
            {
                var skewGrass = new DoubleAnimation
                {
                    From = 0,
                    To = 10,
                    EasingFunction = new BackEase(),
                    AutoReverse = true
                };
                var transform = (MatrixTransform)element.RenderTransform;
                transform.BeginAnimation(SkewTransform.AngleXProperty, skewGrass);
            }
        }
    }
publicstaticvoidgrass(画布,intboundry)
{
foreach(canvas.Children.OfType()中的var元素)
{
if(element.Name==“GrassForeground”| | element.Name==“GrassBackground”)
{
var skewGrass=新的双动画
{
From=0,
To=10,
EasingFunction=new BackEase(),
自动翻转=真
};
var transform=(MatrixTransform)element.RenderTransform;
transform.BeginAnimation(SkewTransform.AngleXProperty,skewGrass);
}
}
}

试试下面的方法,或者您使用MatrixTransform有特殊原因吗

public static void Grass(Canvas canvas, int boundry)
{
    foreach (var element in canvas.Children.OfType<Image>())
    {
        if (element.Name == "GrassForeground" || element.Name == "GrassBackground")
        {
            var skewGrass = new DoubleAnimation
            {
                Duration = new Duration(TimeSpan.FromSeconds(5)),
                From = 0,
                To = 10,
                EasingFunction = new BackEase(),
                AutoReverse = true
            };
            element.RenderTransform = new SkewTransform();
            element.RenderTransform.BeginAnimation(SkewTransform.AngleXProperty, skewGrass);
        }
    }
}
publicstaticvoidgrass(画布,intboundry)
{
foreach(canvas.Children.OfType()中的var元素)
{
if(element.Name==“GrassForeground”| | element.Name==“GrassBackground”)
{
var skewGrass=新的双动画
{
持续时间=新的持续时间(TimeSpan.FromSeconds(5)),
From=0,
To=10,
EasingFunction=new BackEase(),
自动翻转=真
};
element.RenderTransform=新的SkewTransform();
元素.RenderTransform.BeginAnimation(SkewTransform.AngleXProperty,skewGrass);
}
}
}

您的
元素
已经有一个
RenderTransform
属性赋值,但此对象是一个冻结的
SkewTransform
对象。无法更改其AngleX属性,因为它已渲染

如果将RenderTransform属性指定给
新SkewTransform()
SkewTransform
不会冻结,则可以设置动画

尽管Freezable类有许多应用程序,但大多数都是可Freezable的 WINDOWS演示文稿基础(WPF)中的对象与 图形子系统


这里有一个完整的解释:

谢谢你,好心的先生,终于让这个流血的动画开始工作了@nblackburn这正是我的答案。我做了一些调整,让它发挥得很好,我以前没有意识到。