2

スキューアニメーションをダブルアニメーションクラスに変換することで進歩を遂げました。残っている唯一の問題は、アニメーションがディスパッチタイマーによって呼び出されたときに、エラーがスローされることです。エラーは次のとおりです...

オブジェクトが封印または凍結されているため、「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);
            }
        }
    }
4

2 に答える 2

4

以下でこれを試してください。または、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);
        }
    }
}
于 2012-12-02T20:29:57.630 に答える
1

すでにプロパティが割り当てられelementていRenderTransformますが、このオブジェクトはフリーズ SkewTransformされたオブジェクトです。すでにレンダリングされているため、AngleXプロパティを変更することはできません。

RenderTransformプロパティをに割り当てると、new SkewTransform()これSkewTransformはフリーズせず、アニメーション化できます。

Freezableクラスには多くのアプリケーションがありますが、Windows Presentation Foundation(WPF)のほとんどのFreezableオブジェクトは、グラフィックスサブシステムに関連しています。

完全な説明は次のとおりです。MSDNのフリーズ可能なオブジェクトの概要

于 2013-10-21T15:42:58.850 に答える