需要帮助修复代码背后的WPF C#故事板

h22fl7wq  于 11个月前  发布在  C#
关注(0)|答案(2)|浏览(122)

使用下面的代码示例,myImage仅沿沿着Y轴移动,但不沿X轴移动。我需要myImage同时沿沿着X和Y轴移动。Image 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();

字符串

jucafojl

jucafojl1#

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

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

字符串

i7uaboj4

i7uaboj42#

你既不需要故事板,也不需要TransformGroup。一般来说,你很少需要代码中的故事板,它们是用来在XAML中使用的。
这个代码就足够了:

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

字符串

相关问题