我在画布中有一个wpf应用程序和图像。图像放在0,0。
中我需要为从0,0到500,200移动的图像设置动画,同时增长(我喜欢产生像从远到近的效果)。
如果我这样做:
TranslateTransform ttx = new TranslateTransform();
TranslateTransform tty = new TranslateTransform();
DoubleAnimationUsingKeyFrames dax = new DoubleAnimationUsingKeyFrames();
dax.KeyFrames.Add(new LinearDoubleKeyFrame(500, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(1))));
DoubleAnimationUsingKeyFrames day = new DoubleAnimationUsingKeyFrames();
day.KeyFrames.Add(new LinearDoubleKeyFrame(200, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(1))));
TransformGroup tg = new TransformGroup();
tg.Children.Add(ttx);
tg.Children.Add(tty);
krug.RenderTransform = tg;
ttx.BeginAnimation(TranslateTransform.XProperty, dax);
tty.BeginAnimation(TranslateTransform.YProperty, day);
这很好用。它将图像“krug”的翻译从0,0动态变为500,200。
但是当我在翻译时添加用于缩放图像的逻辑:
ScaleTransform zoom = new ScaleTransform();
DoubleAnimationUsingKeyFrames zoomTimeline = new DoubleAnimationUsingKeyFrames();
zoomTimeline.KeyFrames.Add(new LinearDoubleKeyFrame(2, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(1))));
tg.Children.Add(zoom);
zoom.BeginAnimation(ScaleTransform.ScaleXProperty, zoomTimeline);
zoom.BeginAnimation(ScaleTransform.ScaleYProperty, zoomTimeline);
然后图像不会停止到500,200但是更远。如果缩放系数较大,则翻译将来会更多。如何控制动画停在500,200?
答案 0 :(得分:1)
组合缩放和平移变换时遇到的问题是它会从原点(ScaleTransform.CenterX,ScaleTransform.CenterY)缩放平移变换
例如,如果要将其向右滑动50,并将其缩放两倍,它实际上会移动100的净距离。
尝试动画ScaleTransform.CenterX和ScaleTransform.CenterY以匹配您的平移变换。我相信这会让你随心所欲地扩展。
答案 1 :(得分:0)
将动画放在一个故事板中,并设置故事板的持续时间以控制动画的长度。
然后启动故事板。
答案 2 :(得分:0)
我找到了解决方案。我创建了单独的用户控件,只执行ScaleTransform。然后我在用户控件上应用TranslateTransform。