C# 倾斜动画无法设置动画
我在将我的倾斜动画翻译成双动画类方面取得了进展。剩下的唯一问题是,当调度计时器调用动画时,会抛出一个错误。错误如下 无法对“System.Windows.Media.MatrixTransform”上的“AngleX”属性设置动画,因为该对象已被密封或冻结 如何克服此错误以使动画能够工作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
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这正是我的答案。我做了一些调整,让它发挥得很好,我以前没有意识到。