欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

WPF动画动态变换

程序员文章站 2022-03-07 17:07:12
...

WPF动态变换提供了自定义元素的最强大方式之一。每个元素都能以两种不同的方式使用变换,‘RenderTransform’属性和‘LayoutTransform’属性。RenderTransform属性效率更高,是因为在布局之后才应用变换的,并且用于变换最终的渲染输出;而LayoutTransform在布局前应用,从而其他控件需要重新排列以适应变换。

下面是一个‘RenderTransform’ 属性的动态变换例子代码:
<Window x:Class=“动态变换”
xmlns=“http://schemas.microsoft.com/winfx/2006/xaml/presentation
xmlns:x=“http://schemas.microsoft.com/winfx/2006/xaml
xmlns:d=“http://schemas.microsoft.com/expression/blend/2008
xmlns:mc=“http://schemas.openxmlformats.org/markup-compatibility/2006
xmlns:local="clr-namespace: “动态变换”
mc:Ignorable=“d”
WindowStartupLocation=“CenterScreen”
Title=“动态变换” Height=“600” Width=“900”>
<Window.Resources>

     <Style TargetType="{x:Type Button}">
        <Setter Property="Width" Value="100"/>
        <Setter Property="Height" Value="60"/>
        <Setter Property="Margin" Value="10"/>
        <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>
            <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>
            <EventTrigger RoutedEvent="Button.MouseLeave">
                <EventTrigger.Actions>
                    <BeginStoryboard>
                        <Storyboard Storyboard.TargetProperty="RenderTransform.Children[0].Angle">
                            <DoubleAnimation  To="0" Duration="0:0:1"/>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger.Actions>
            </EventTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>
<StackPanel>
    <Button Background="Green" />
    <Button Background="Blue"/>
    <Button Background="Red"/>
    <Button Background="Black"/>
</StackPanel>
</Window>

下面是结果图,使用RotateTransform时,一定要使用TransformGroup,否则不能进行动画,RotateTransform能够让某对象产生旋转变化,根据中心点位置不变进行顺时针旋转或逆时针旋转。对于MediaElement元素使用RenderTransform属性比使用LayoutTransform属性更好,因为RenderTransform属性是轻量级的。而且它还可以使用方便的RenderTransformOrigin属性值,从而可以为特定的变换(如旋转)使用相对坐标。
WPF动画动态变换

WPF中的变形(RenderTransform)类是为了达到直接去改变某个Silverlight对象的形状(比如缩放、旋转一个元素)的目的而设计的,RenderTransform包含的变形属性成员就是专门用来改变Silverlight对象形状的,它可以实现对元素拉伸,旋转,扭曲等效果,同时变形特效也常用于辅助产生各种动画效果。变形元素包括平移变形、旋转变形、缩放变形、扭曲变形、矩阵变形和组合变形元素,变形特效常用于在不改变对象本身构成的情况下,使对象产生变形效果,所以变形元素常辅助产生Silverlight中的各种动画效果。