需要帮助在 wpf 的变换组中应用动画
Need help applying animation in transform group in wpf
我有一块应用缩放变换和旋转变换的 xaml。
<Image.RenderTransform>
<TransformGroup>
<RotateTransform Angle="0" x:Name="RotateTransform"/>
<TranslateTransform X="0" Y="0"/>
<ScaleTransform ScaleX="2" ScaleY="2"/>
</TransformGroup>
</Image.RenderTransform>
我还有一个故事板需要像这样访问 RotateTransform:
<Storyboard x:Key="Storyboard"
Storyboard.TargetProperty="(RenderTransform).(RotateTransform.Angle)"
Storyboard.TargetName="RotateTransform">
<DoubleAnimation From="0" To="360" RepeatBehavior="Forever" SpeedRatio="0.25" />
</Storyboard>
但是我无法让图像旋转,但它确实按比例放大了。有人有解决问题的建议吗?
编辑:我发现我可以使用
<Storyboard x:Key="Storyboard"
Storyboard.TargetProperty="(Image.RenderTransform).Children[0].Angle"
Storyboard.TargetName="ContentImage">
<DoubleAnimation From="0" To="360" RepeatBehavior="Forever" SpeedRatio="0.25" />
</Storyboard>
并通过数组位置调用动画,但为什么实际上无法通过x:Name自动调用变换属性的角度属性?
A RotateTransform 没有 RenderTransform
属性,所以你不能制作动画 RenderTransform.Angle
.
动画必须直接以 Angle
属性 为目标。此外,您通常会将 TargetName
和 TargetProperty
属性应用于 DoubleAnimation,而不是 Storyboard。您还可以设置动画的 Duration
,而不是为一秒的默认持续时间应用 SpeedRatio
。
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="RotateTransform"
Storyboard.TargetProperty="Angle"
From="0" To="360" RepeatBehavior="Forever" Duration="0:0:4"/>
</Storyboard>
RenderTransform 和 RotateTransform 是关联的属性,需要用括号括起来。这是正确的语法。
<Storyboard x:Key="Storyboard"
TargetProperty="(RenderTransform).Children[0].(RotateTransform.Angle)"
TargetName="ContentImage">
<DoubleAnimation From="0" To="360" RepeatBehavior="Forever" SpeedRatio="0.25" />
</Storyboard>
正如您在编辑中指出的那样,您也可以将其写为
<Storyboard x:Key="Storyboard"
TargetProperty="(RenderTransform).Children[0].Angle"
TargetName="ContentImage">
<DoubleAnimation From="0" To="360" RepeatBehavior="Forever" SpeedRatio="0.25" />
</Storyboard>
我有一块应用缩放变换和旋转变换的 xaml。
<Image.RenderTransform>
<TransformGroup>
<RotateTransform Angle="0" x:Name="RotateTransform"/>
<TranslateTransform X="0" Y="0"/>
<ScaleTransform ScaleX="2" ScaleY="2"/>
</TransformGroup>
</Image.RenderTransform>
我还有一个故事板需要像这样访问 RotateTransform:
<Storyboard x:Key="Storyboard"
Storyboard.TargetProperty="(RenderTransform).(RotateTransform.Angle)"
Storyboard.TargetName="RotateTransform">
<DoubleAnimation From="0" To="360" RepeatBehavior="Forever" SpeedRatio="0.25" />
</Storyboard>
但是我无法让图像旋转,但它确实按比例放大了。有人有解决问题的建议吗?
编辑:我发现我可以使用
<Storyboard x:Key="Storyboard"
Storyboard.TargetProperty="(Image.RenderTransform).Children[0].Angle"
Storyboard.TargetName="ContentImage">
<DoubleAnimation From="0" To="360" RepeatBehavior="Forever" SpeedRatio="0.25" />
</Storyboard>
并通过数组位置调用动画,但为什么实际上无法通过x:Name自动调用变换属性的角度属性?
A RotateTransform 没有 RenderTransform
属性,所以你不能制作动画 RenderTransform.Angle
.
动画必须直接以 Angle
属性 为目标。此外,您通常会将 TargetName
和 TargetProperty
属性应用于 DoubleAnimation,而不是 Storyboard。您还可以设置动画的 Duration
,而不是为一秒的默认持续时间应用 SpeedRatio
。
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="RotateTransform"
Storyboard.TargetProperty="Angle"
From="0" To="360" RepeatBehavior="Forever" Duration="0:0:4"/>
</Storyboard>
RenderTransform 和 RotateTransform 是关联的属性,需要用括号括起来。这是正确的语法。
<Storyboard x:Key="Storyboard"
TargetProperty="(RenderTransform).Children[0].(RotateTransform.Angle)"
TargetName="ContentImage">
<DoubleAnimation From="0" To="360" RepeatBehavior="Forever" SpeedRatio="0.25" />
</Storyboard>
正如您在编辑中指出的那样,您也可以将其写为
<Storyboard x:Key="Storyboard"
TargetProperty="(RenderTransform).Children[0].Angle"
TargetName="ContentImage">
<DoubleAnimation From="0" To="360" RepeatBehavior="Forever" SpeedRatio="0.25" />
</Storyboard>