C# 用C语言完全编程地创建故事板#
我试图完全用C#创建一个故事板,根本没有XAML,但我在(SetTarget和SetTargetProperty)方面遇到了问题。。这是我的密码 当用户导航到我的UserControl时,我正在设置它的动画, 它在0.5秒内从0不透明度变为100,从900 X变为0 我真的非常感谢任何人帮助我设置这两个参数,因为我整天都在这么做,运气不好C# 用C语言完全编程地创建故事板#,c#,animation,storyboard,blend,C#,Animation,Storyboard,Blend,我试图完全用C#创建一个故事板,根本没有XAML,但我在(SetTarget和SetTargetProperty)方面遇到了问题。。这是我的密码 当用户导航到我的UserControl时,我正在设置它的动画, 它在0.5秒内从0不透明度变为100,从900 X变为0 我真的非常感谢任何人帮助我设置这两个参数,因为我整天都在这么做,运气不好 public void Designer() { Control_ = new UserControl();
public void Designer()
{
Control_ = new UserControl();
Control_.HorizontalAlignment = HorizontalAlignment.Stretch;
Control_.VerticalAlignment = VerticalAlignment.Stretch;
Control_.Name = "Control_";
this.AddChild(Control_);
CreateStoryboard();
}
public void CreateStoryboard()
{
fadeinBoard = new Storyboard();
Duration duration = new Duration(TimeSpan.FromMilliseconds(5));
fadeinBoard.Duration = duration;
DoubleAnimationUsingKeyFrames animOpacity = new DoubleAnimationUsingKeyFrames();
DoubleAnimationUsingKeyFrames animTransform = new DoubleAnimationUsingKeyFrames();
animOpacity.Duration = duration;
animTransform.Duration = duration;
//Transform Function
KeyTime ktime1 = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(.5));
PowerEase pow = new PowerEase();
pow.Power = 5;
pow.EasingMode = EasingMode.EaseOut;
EasingDoubleKeyFrame keyFrame1 = new EasingDoubleKeyFrame(0, ktime1, pow);
//Opacity Function
KeyTime ktime2 = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(.5));
ExponentialEase expo = new ExponentialEase();
expo.Exponent = 3;
expo.EasingMode = EasingMode.EaseOut;
EasingDoubleKeyFrame keyFrame2 = new EasingDoubleKeyFrame(1, ktime2, expo);
animOpacity.KeyFrames.Add(keyFrame1);
animTransform.KeyFrames.Add(keyFrame2);
// MY PROBLEM IS HERE
Storyboard.SetTarget(???, ???);
Storyboard.SetTarget(???, ???);
Storyboard.SetTargetProperty(???, ???);
Storyboard.SetTargetProperty(???, ???)));
fadeinBoard.Children.Add(animOpacity);
fadeinBoard.Children.Add(animTransform);
Control_.Resources.Add("fader", fadeinBoard);
}
这对我来说适用于以下方面:
Storyboard.SetTarget(animOpacity, Control_);
Storyboard.SetTarget(animTransform, Control_);
Storyboard.SetTargetProperty(animOpacity, new PropertyPath("Opacity"));
Storyboard.SetTargetProperty(animTransform, new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"));
请注意从OpacityProperty到Opacity的更正,以及完全限定的属性语法-我已经将其配置为在ScaleY上工作
但是,只有在向控件添加了可使用提供的路径访问的RenderTransform时,这才起作用,例如,如下所示:
ScaleTransform myScaleTransform = new ScaleTransform();
myScaleTransform.ScaleY = 1;
myScaleTransform.ScaleX = 1;
TransformGroup myTransformGroup = new TransformGroup();
myTransformGroup.Children.Add(myScaleTransform);
Control_.RenderTransform = myTransformGroup;
应该是://我的问题就在这里Storyboard.SetTarget(animpacity,Control);故事板.SetTarget(动画转换、控制);Storyboard.SetTargetProperty(animOpacity,新属性路径(“OpacityProperty”));Storyboard.SetTargetProperty(animTransform,新的PropertyPath((“RenderTransform.Children[0].TransformX”))@本·杰克逊既不工作,也不工作,不管引用与否,我总是在这一部分中遇到例外。我只是不知道如何设置那个值@BenJackson我修改了我的问题,希望这能让事情变得更清楚,对不起,这能解决你的问题吗@RosdiKasim感谢rosdi的帮助,但是提供的代码是XAML,我希望用C#BenJackson来做这件事实际上帮助解决了我的问题,现在它工作得很好。如果没有问题作者提供的好消息,就不可能确定代码中的所有错误。然而,在我看来,上面的内容似乎解决了最突出的问题:作为
SetTargetProperty()
方法调用的DependencyObject
参数传递的值错误。FWIW:我倾向于将实际的DependencyProperty
值传递给PropertyPath
构造函数。这样代码中的“魔法文字”就更少了。例如,Storyboard.SetTargetProperty(控件、新属性路径(UIElement.OpacityProperty))代码>非常感谢@BenJackson,它帮了很多忙,就像你发布的一样,现在我只想知道如何定位Translate属性。但故事板最终还是被设计出来了animating@PeterDuniho很抱歉,这个问题不够清楚,我将在将来尝试提供更多细节。谢谢你的帮助