如何解决围绕元素原始旋转动画到C#代码
我有一个XAML代码,可以对元素的rotationtransform的angle属性进行动画处理:
<Canvas.RenderTransform>
<RotateTransform Angle="0"
x:Name="MyAnimatedTransform"/>
</Canvas.RenderTransform>
<Canvas.Triggers>
<EventTrigger RoutedEvent="Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="MyAnimatedTransform"
Storyboard.TargetProperty="(RotateTransform.Angle)"
From="0.0"
To="90"
Duration="0:0:1" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Canvas.Triggers>
此后,我一直在尝试将其转换为C#代码,但是由于某些原因,我认为我缺少了某些东西...
代码:
public void AnimateElement(RotateTransform element,UIElement control,double degreesTo,double secDuration)
{
DoubleAnimation OriginAnimatorDoubleAnimation = new DoubleAnimation()
{
From = 0,To = degreesTo,Duration = TimeSpan.FromSeconds(secDuration)
};
Storyboard.SetTargetProperty(element,new PropertyPath("RotateTransform.Angle"));
Storyboard.SetTarget(element,OriginAnimatorDoubleAnimation);
Storyboard storyboard = new Storyboard();
storyboard.Duration = TimeSpan.FromSeconds(secDuration);
storyboard.Children.Add(OriginAnimatorDoubleAnimation);
storyboard.Begin();
}
有人可以告诉我我在做什么错吗?
谢谢
解决方法
这与您的XAML并不完全等效,但是您不需要在代码后的情节提要。
public void RotateElement(UIElement element,double degreesTo,double secDuration)
{
if (element.RenderTransform is RotateTransform transform)
{
var animation = new DoubleAnimation
{
To = degreesTo,Duration = TimeSpan.FromSeconds(secDuration)
};
transform.BeginAnimation(RotateTransform.AngleProperty,animation);
}
}
请注意,元素的RenderTransform中仍然必须已经有RotateTransform。如果不是这种情况,则将其放置在适当位置:
public void RotateElement(UIElement element,double secDuration)
{
var transform = element.RenderTransform as RotateTransform;
if (transform == null)
{
transform = new RotateTransform();
element.RenderTransform = transform;
element.RenderTransformOrigin = new Point(0.5,0.5);
}
var animation = new DoubleAnimation
{
To = degreesTo,Duration = TimeSpan.FromSeconds(secDuration)
};
transform.BeginAnimation(RotateTransform.AngleProperty,animation);
}
,
这对我有用:
public void RotateElement(RotateTransform transform,double secDuration)
{
var animation = new DoubleAnimation
{
To = degreesTo,Duration = TimeSpan.FromSeconds(secDuration)
};
transform.BeginAnimation(RotateTransform.AngleProperty,animation);
}
不过谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。