需要帮助修复代码隐藏中的 WPF C# 故事板

问题描述 投票:0回答:2

使用下面的代码示例,myImage 只沿 Y 轴移动,而不是 X 轴。我需要 myImage 同时沿 X 轴和 Y 轴移动。图像 myImage 存在于 Canvas 内的 XAML 中。有建议吗?

感谢您的时间和帮助!

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))));

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();
Storyboard.SetTargetName(s, translationName);
Storyboard.SetTargetProperty(s, new PropertyPath(TranslateTransform.XProperty));
Storyboard.SetTargetProperty(s, new PropertyPath(TranslateTransform.YProperty));
string storyboardName = "s";
Resources.Add(storyboardName, s);
s.Children.Add(AnimateX);
s.Children.Add(AnimateY);
s.Begin();
c# wpf storyboard code-behind transformgroup
2个回答
0
投票

问题出在代码的最后一个片段,将其更改为

Storyboard s = new Storyboard();
Storyboard.SetTargetName(s, translationName);
Storyboard.SetTargetProperty(AnimateX, new PropertyPath(TranslateTransform.XProperty));
Storyboard.SetTargetProperty(AnimateY, new PropertyPath(TranslateTransform.YProperty));
string storyboardName = "s";
Resources.Add(storyboardName, s);
s.Children.Add(AnimateX);
s.Children.Add(AnimateY);
s.Begin(myImage);

0
投票

您既不需要 Storyboard,也不需要 TransformGroup。

这段代码就足够了:

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

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

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

translation.BeginAnimation(TranslateTransform.XProperty, animateX);
translation.BeginAnimation(TranslateTransform.YProperty, animateY);
© www.soinside.com 2019 - 2024. All rights reserved.