如何重置RotateTransform的角度属性

时间:2011-10-22 02:53:35

标签: c# wpf animation angle

我有一个画布包含一些显示机器人手臂的元素。这个手臂可以通过动画伸展和拉回。

现在我需要初始化手臂并在某些情况下保持折叠状态(而不是通过动画)。所以我需要重置RotateTransform的angle属性。

 <Canvas x:Name="RobotArm_Left" Width="60" Height="10" RenderTransformOrigin="0.9167,0.5" Canvas.Top="62.5" Canvas.Left="12.5">
    <Canvas.RenderTransform>
        <TransformGroup>                                   
            <RotateTransform x:Name="Rotate_RobotArm_Left" />                                    
        </TransformGroup>
    </Canvas.RenderTransform>
</Canvas>

我使用两种方法设置角度:

((RotateTransform)page.FindName("Rotate_RobotArm_Left")).Angle=0; //0 is the init value
((RotateTransform)page.FindName("Rotate_RobotArm_Left")).SetValue(RotateTransform.AngleProperty, 0.0);
他们都不行。

当我观察((RotateTransform)page.FindName(“Rotate_RobotArm_Left”))的值时。角度,它是-55。

有没有一种设置属性的方法?

否则,在运行动画之前,可以更改角度属性。但是在动画之后,它无法更改。

感谢。

2 个答案:

答案 0 :(得分:1)

动画值优​​先于本地设置值。停止动画(在这种情况下,值将恢复为其未动画值)或将其设置为所需的值。有关详细信息,请参阅dependency property precedence

在这种情况下使用SetCurrentValue是一种黑客攻击,因为你要替换动画产生的值,而不是将动画完全删除为值源。换句话说,动画仍处于活动状态,您刚刚更改了它报告的值。

答案 1 :(得分:1)

另一种方法可能有用:

不要为旋转设置动画,而是为对象的属性设置动画并将旋转角度绑定到该对象。这将允许您控制动画并使您无法了解/查找XAML中的元素。