从代码中为WPF中的MatrixTransform制作动画

时间:2009-05-27 11:26:41

标签: c# wpf animation matrix transform

我有一个Canvas,我需要为它的RenderTransform属性设置动画。开始和结束矩阵都是abitrary,所以我不能在XAML中预先编写故事板,所以我试图在代码中执行它,我找不到任何如何执行此操作的示例,下面是我最好的尝试哪个不起作用(它编译并运行,但rendertransform不会改变)。

有关如何做到这一点的任何建议?

MatrixAnimationUsingKeyFrames anim = new MatrixAnimationUsingKeyFrames();
MatrixKeyFrameCollection keyframes = new MatrixKeyFrameCollection();
DiscreteMatrixKeyFrame start = new DiscreteMatrixKeyFrame(fromMatrix, KeyTime.FromPercent(0));
DiscreteMatrixKeyFrame end = new DiscreteMatrixKeyFrame(toMatrix, KeyTime.FromPercent(1));

keyframes.Add(start);
keyframes.Add(end);
anim.KeyFrames = keyframes;

Storyboard.SetTarget(anim, World.RenderTransform);
Storyboard.SetTargetProperty(anim, new PropertyPath("Matrix"));

Storyboard sb = new Storyboard();
sb.Children.Add(anim);
sb.Duration = TimeSpan.FromSeconds(4);
sb.Begin();

3 个答案:

答案 0 :(得分:5)

我已经实现了MatrixAnimation类,它支持平滑的平移,缩放和旋转动画。它还支持缓动功能!查找http://pwlodek.blogspot.com/2010/12/matrixanimation-for-wpf.html

答案 1 :(得分:2)

我设法通过设置rendersource和使用beginanimation

来完成matrixtransform的工作

类似的东西:

        this.matrixTransform = new MatrixTransform();
        this.canvas.RenderTransform = this.matrixTransform;


        MatrixAnimationUsingKeyFrames anim = new MatrixAnimationUsingKeyFrames();
        anim.KeyFrames = new MatrixKeyFrameCollection();
        anim.Duration = TimeSpan.FromSeconds(4);

        Matrix fromMatrix = new Matrix(2, 0, 0, 2, 0, 0);
        Matrix toMatrix =  new Matrix(3, 0, 0, 3, 0, 0);

        anim.FillBehavior = FillBehavior.HoldEnd;
        DiscreteMatrixKeyFrame start = new DiscreteMatrixKeyFrame(fromMatrix, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0)));
        DiscreteMatrixKeyFrame end = new DiscreteMatrixKeyFrame(toMatrix, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(4)));

        anim.KeyFrames.Add(start);
        anim.KeyFrames.Add(end);

        this.matrixTransform.BeginAnimation(MatrixTransform.MatrixProperty, anim);

我不确定自己将如何对所有关键帧进行插值:)

答案 2 :(得分:2)

我今天早上遇到了这个问题,虽然我使用的解决方案无法应对旋转或剪切。 link