我有一个XAML代码,它为元素的旋转变换的角度属性设置动画:
<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 degreesTo, 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 degreesTo, double secDuration)
{
var animation = new DoubleAnimation
{
To = degreesTo,
Duration = TimeSpan.FromSeconds(secDuration)
};
transform.BeginAnimation(RotateTransform.AngleProperty, animation);
}
不过谢谢!