我有一个画布包含一些显示机器人手臂的元素。这个手臂可以通过动画伸展和拉回。
现在我需要初始化手臂并在某些情况下保持折叠状态(而不是通过动画)。所以我需要重置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。
有没有一种设置属性的方法?
否则,在运行动画之前,可以更改角度属性。但是在动画之后,它无法更改。
感谢。
答案 0 :(得分:1)
动画值优先于本地设置值。停止动画(在这种情况下,值将恢复为其未动画值)或将其设置为所需的值。有关详细信息,请参阅dependency property precedence。
在这种情况下使用SetCurrentValue
是一种黑客攻击,因为你要替换动画产生的值,而不是将动画完全删除为值源。换句话说,动画仍处于活动状态,您刚刚更改了它报告的值。
答案 1 :(得分:1)
另一种方法可能有用:
不要为旋转设置动画,而是为对象的属性设置动画并将旋转角度绑定到该对象。这将允许您控制动画并使您无法了解/查找XAML中的元素。