WPF除了一些基本的属性动画之外,还可以执行的动画的平移或者缩放,这些动画元素的变换都能使用两种不同的方式,,RenderTransform属性和LayoutTransform属性。RenderTransform属性在布局之后应用变换,并且用于变换最终的渲染输出,使得它的效率更高。LayoutTransform属性在布局前应用,使得其他控件需要重新排列以适应变换。
实例:设置一个旋转动画RenderTransformOrigin改变按钮的变形,Angle旋转角度
<Window.Resources>
<!--按钮样式-->
<Style TargetType="{x:Type Button}">
<Setter Property="Width" Value="100"/>
<Setter Property="Height" Value="60"/>
<Setter Property="FontSize" Value="20"/>
<Setter Property="RenderTransformOrigin" Value="0.5,0.5"/>
<Setter Property="RenderTransform">
<Setter.Value>
<TransformGroup>
<RotateTransform/>
</TransformGroup>
</Setter.Value>
</Setter>
<Style.Triggers>
<!--MouseLeave鼠标进入事件-->
<EventTrigger RoutedEvent="Button.MouseEnter">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard RepeatBehavior="Forever" Storyboard.TargetProperty="RenderTransform.Children[0].Angle">
<DoubleAnimation From="0" To="360" Duration="0:0:2"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
<Window.Resources>
<StackPanel>
<Button Content="Test1"/>
</StackPanel>
LayoutTransform属性对于TransformGroup的使用来说,可用可不用,但是RenderTransform来说的就要使用TransformGroup了,否则运行时会出错。LayoutTransform 在布局计算之前进行变换计算,使得其他控件需要重新计算以适应变换,所以一般情况下都不使用LayoutTransform,更多的是使用RenderTransform 。实例写法与上例相差无几
<Setter Property="RenderTransformOrigin" Value="0.5,0.5"/>
<Setter Property="LayoutTransform">
<Setter.Value>
<RotateTransform/>
</Setter.Value>
</Setter>
<Style.Triggers
<EventTrigger RoutedEvent="Button.MouseEnter">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard RepeatBehavior="Forever" Storyboard.TargetProperty="LayoutTransform.Angle">
<DoubleAnimation From="0" To="360" Duration="0:0:2"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>