You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:修复WPF C#后台代码中Storyboard的图片双轴动画问题

解决WPF中TranslateTransform无法同时沿X/Y轴动画的问题

你的代码核心问题是重复设置了Storyboard的TargetProperty——第二次设置TranslateTransform.YProperty时覆盖了第一次的XProperty配置,导致只有Y轴动画生效。

修正方案1:给单个动画绑定目标属性

将目标属性绑定到每个动画对象,而非整个Storyboard,避免覆盖:

DoubleAnimationUsingKeyFrames AnimateX = new DoubleAnimationUsingKeyFrames();
AnimateX.KeyFrames.Add(new EasingDoubleKeyFrame(0, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0))));
AnimateX.KeyFrames.Add(new EasingDoubleKeyFrame(80, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(3))));
// 给X轴动画单独设置目标
Storyboard.SetTargetName(AnimateX, translationName);
Storyboard.SetTargetProperty(AnimateX, new PropertyPath(TranslateTransform.XProperty));

DoubleAnimationUsingKeyFrames AnimateY = new DoubleAnimationUsingKeyFrames();
AnimateY.KeyFrames.Add(new EasingDoubleKeyFrame(0, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0))));
AnimateY.KeyFrames.Add(new EasingDoubleKeyFrame(34, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(3))));
// 给Y轴动画单独设置目标
Storyboard.SetTargetName(AnimateY, translationName);
Storyboard.SetTargetProperty(AnimateY, new PropertyPath(TranslateTransform.YProperty));

TransformGroup tg = new TransformGroup();
TranslateTransform translation = new TranslateTransform();
string translationName = "myTranslation";
RegisterName(translationName, translation);
tg.Children.Add(translation);
myImage.RenderTransform = tg;

Storyboard s = new Storyboard();
string storyboardName = "s";
Resources.Add(storyboardName, s);
s.Children.Add(AnimateX);
s.Children.Add(AnimateY);
s.Begin();

修正方案2:直接给属性启动动画(更简洁)

如果不需要Storyboard的额外功能(如控制播放状态、绑定触发器),可以跳过Storyboard,直接给TranslateTransform的X/Y属性启动动画:

DoubleAnimationUsingKeyFrames AnimateX = new DoubleAnimationUsingKeyFrames();
AnimateX.KeyFrames.Add(new EasingDoubleKeyFrame(0, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0))));
AnimateX.KeyFrames.Add(new EasingDoubleKeyFrame(80, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(3))));

DoubleAnimationUsingKeyFrames AnimateY = new DoubleAnimationUsingKeyFrames();
AnimateY.KeyFrames.Add(new EasingDoubleKeyFrame(0, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0))));
AnimateY.KeyFrames.Add(new EasingDoubleKeyFrame(34, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(3))));

TranslateTransform translation = new TranslateTransform();
myImage.RenderTransform = translation;

// 直接启动X、Y轴动画
translation.BeginAnimation(TranslateTransform.XProperty, AnimateX);
translation.BeginAnimation(TranslateTransform.YProperty, AnimateY);

内容的提问来源于stack exchange,提问作者ZioGio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 11:30:21