求助:修复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
相关产品推荐
相关产品推荐

