需要帮助在wpf变换组中应用动画

本文关键字:应用 动画 变换 wpf 帮助 | 更新日期: 2023-09-27 17:49:21

我有一个应用缩放变换和旋转变换的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?

需要帮助在wpf变换组中应用动画

RotateTransform没有RenderTransform属性,所以你不能动画RenderTransform.Angle

动画必须直接针对Angle属性。此外,您通常会将TargetNameTargetProperty属性应用于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>