我有一块xaml应用了缩放变换和rotatetransform。
<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?
自动调用transform属性的angle属性。答案 0 :(得分:0)
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>
答案 1 :(得分:0)
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>