很多时候,blend在制作动画时,会自动为对象生成如下代码:
<
Rectangle
Fill
="White"
Stroke
="Black"
HorizontalAlignment
="Center"
VerticalAlignment
="Center"
Width
="300"
Height
="30"
RenderTransformOrigin
="0.5,0.5"
x:Name
="rect"
>
< Rectangle.RenderTransform >
< TransformGroup >
< ScaleTransform />
< SkewTransform />
< RotateTransform />
< TranslateTransform />
</ TransformGroup >
</ Rectangle.RenderTransform >
</ Rectangle >
< Rectangle.RenderTransform >
< TransformGroup >
< ScaleTransform />
< SkewTransform />
< RotateTransform />
< TranslateTransform />
</ TransformGroup >
</ Rectangle.RenderTransform >
</ Rectangle >
如果想在cs代码中动态控制,就得先知道如何引用它们,在不借助x:Name的情况下,可以这么做:
private
void
Button_Click(
object
sender, RoutedEventArgs e)
{
RotateTransform r = (rect.RenderTransform as TransformGroup).Children[ 2 ] as RotateTransform;
DoubleAnimation dblAnim = new DoubleAnimation() { Duration = TimeSpan.FromSeconds( 1 ), To = 135.0 , EasingFunction = new BackEase() { EasingMode = EasingMode.EaseInOut } };
Storyboard.SetTarget(dblAnim, r);
Storyboard.SetTargetProperty(dblAnim, new PropertyPath(RotateTransform.AngleProperty));
Storyboard sb = new Storyboard();
sb.Children.Add(dblAnim);
sb.AutoReverse = true ;
sb.Begin();
}
}
{
RotateTransform r = (rect.RenderTransform as TransformGroup).Children[ 2 ] as RotateTransform;
DoubleAnimation dblAnim = new DoubleAnimation() { Duration = TimeSpan.FromSeconds( 1 ), To = 135.0 , EasingFunction = new BackEase() { EasingMode = EasingMode.EaseInOut } };
Storyboard.SetTarget(dblAnim, r);
Storyboard.SetTargetProperty(dblAnim, new PropertyPath(RotateTransform.AngleProperty));
Storyboard sb = new Storyboard();
sb.Children.Add(dblAnim);
sb.AutoReverse = true ;
sb.Begin();
}
}
上面的代码,将生成一段动画:1秒钟内将矩形旋转135度