WPF动画

一、动画的本质

在一个时间段内对象位置、角度、颜色、透明度等属性值的连续变化

注意:用来制作动画的属性必须是依赖属性

二、动画的构成

Storyboard:故事板,是BeginAnimation()方法的XAML等价物,动画的基本单元,通过故事板将动画指定到合适的元素和属性,故事板是增强的时间线,可以用来分组多个动画。控制动画的播放、暂停、停止等基础操作,需要指定TargetNameTargetProperty这两个属性。

布局控件(如:Border) - 事件触发器(Trigger) - 开始播放故事板(BeginStoryboard)- 故事板(Storyboard)- 动画(Animation)

三、动画的类型

共三种:简单动画,关键帧动画,沿路径运动的动画

DoubleAnimationBase的派生类为例详细说明:

DoubleAnimation:

DoubleAnimationUsingKeyFrames:

DoubleAnimationUsingPath:

1.简单线性动画DoubleAnimation

所谓“简单线性动画”就是指由变化起点、变化终点、变化幅度、变化时间四个要素构成的。

变化时间(Duration属性):数据类型为Duration(0:0:0:3)或(00:00:03)

变化终点(To属性):

变化幅度(By属性):

变化起点(From属性):

<Button x:Name="bt0" Grid.Row="3" Width="50" Height="50" HorizontalAlignment="Left" Content="Button" >
            <Button.RenderTransform>
                <TranslateTransform x:Name="xx"/>
            </Button.RenderTransform>
            <Button.Triggers>
                <EventTrigger RoutedEvent="Button.Click">
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetName="xx" 
					                        Storyboard.TargetProperty="X"
					                        BeginTime="00:00:00" Duration="00:00:3" From="0" To="200" AutoReverse="True" RepeatBehavior="Forever"/>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Button.Triggers>
        </Button>

以上代码实现的效果是一个button按钮沿着x轴移动到目标位置并无限往返。其中:

AutoReverse属性表示自动返回;

RepeatBehavior属性表示重复动画次数。

RenderTransform:是Button的属性,属性值是名为xx的TranslateTransform对象,改变这个对象的X和Y值就会让Button的显示位置(而不是真实位置)变化。

2.关键帧动画DoubleAnimationUsingKeyFrames

动画执行到某个时间点时,某个属性应该达到什么样的值。

3.路径动画DoubleAnimationUsingPath

让目标沿着给定的一条路径移动。

四、实现颜色渐变动画

实现颜色渐变动画有三种方式:

1.通过改变渐变线性刷(LinearGradientBrush)的偏移量(Offset)来实现背景颜色变化的动画

定义一个Border控件:

<Border x:Name="border" BorderBrush="Black" BorderThickness="1" Grid.Row="3"
                Width="50" Height="50" >
            <Border.Background >
                <LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">
                    <GradientStop Color="{StaticResource NormalColor}" Offset="0"/>
                    <GradientStop Color="{StaticResource WhiteColor}" Offset="0.5"/>
                </LinearGradientBrush>
            </Border.Background>
        </Border>

这里的Color属性可自行设置。 

添加动画,在启动界面时自动触发渐变效果:

<Grid.Triggers >
            <EventTrigger RoutedEvent="Loaded">
                <BeginStoryboard>
                    <Storyboard >
                        <DoubleAnimation Duration="0:0:0:3"  To="1" From="0"
                                         Storyboard.TargetName="border"
                                         Storyboard.TargetProperty="(Border.Background).(LinearGradientBrush.GradientStops)[1].(GradientStop.Offset)"
                                         RepeatBehavior="Forever"
                                         AutoReverse="True"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Grid.Triggers>

2.通过改变透明度来实现背景颜色渐变动画

定义一个Border控件:

<Border x:Name="bd1" BorderBrush="Gray" BorderThickness="2"
                Background="Purple" Width="50" Height="50" Grid.Row="3" VerticalAlignment="Center"
                HorizontalAlignment="Right" >

添加动画,在启动界面时自动触发渐变效果:

<Grid.Triggers >
            <EventTrigger RoutedEvent="Loaded">
                <BeginStoryboard>
                    <Storyboard x:Name="sb1" AutoReverse="True" >
                        <DoubleAnimation Duration="0:0:0:3" To="0" From="1"
                                         Storyboard.TargetName="bd1"
                                         Storyboard.TargetProperty="Opacity"
                                         RepeatBehavior="Forever"
                                         AutoReverse="True"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Grid.Triggers>

3.改变 color

五、动画特效(Effect)

WPF的控件效果主要通过Effect来实现,而Effect有:

DropshadowEffect(投影效果)和BlurEffect(模糊效果)。

1.DropshadowEffect(投影效果)

Direction属性:决定了阴影的方向,阴影为逆时针方向(0-360)。

ShadowDepth属性:决定了阴影的投影长度,数值越大,投影越长,值为0时为四周投影。

BlurRadius属性:模糊半径。

Color属性:设置阴影的颜色。

Opacity属性:阴影的透明度。

2.BlurEffect(模糊效果)

Radius属性:模糊效果,值越大,越模糊。

KernelType属性:有Box效果,如马赛克;有Gaussian效果,玻璃模糊。

以下是通过改变透明度实现动画效果的例子:

 XAML代码如下:

       <Border BorderBrush="Green" BorderThickness="10" Grid.Row="3" Margin="372,15,146,15" x:Name="bd9">
            <Border.Effect>
                <!--<DropShadowEffect BlurRadius="15" ShadowDepth="0" Color="Black" Opacity="20" Direction="0"/>-->
                <BlurEffect Radius="20" KernelType="Gaussian"/>
            </Border.Effect>
        </Border>
        <Grid.Triggers >
            <EventTrigger RoutedEvent="Loaded">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Duration="0:0:0:5" To="0.1" From="1"
                                         Storyboard.TargetName="bd9"
                                         Storyboard.TargetProperty="Opacity"
                                         AutoReverse="True"
                                         RepeatBehavior="Forever"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Grid.Triggers>

注意:当对Border使用Effect的时候,最好不要在Border内部添加TextBlock等展示元素,否则会造成textblock模糊。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
WPF(Windows Presentation Foundation)提供了一系列强大的动画功能,可以轻松地创建各种动态效果。以下是几个常见的WPF动画: 1. 透明度动画:可以通过改变元素的不透明度来创建淡入淡出效果。 ```xaml <Canvas> <Ellipse x:Name="myEllipse" Fill="Blue" Width="50" Height="50" Canvas.Left="0" Canvas.Top="0"/> <Button x:Name="myButton" Content="Animate" Width="100" Height="30" Canvas.Left="0" Canvas.Top="60"> <Button.Triggers> <EventTrigger RoutedEvent="Button.Click"> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetName="myEllipse" Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:3"/> </Storyboard> </BeginStoryboard> </EventTrigger> </Button.Triggers> </Button> </Canvas> ``` 2. 位移动画:可以通过改变元素的位置来创建移动效果。 ```xaml <Canvas> <Ellipse x:Name="myEllipse" Fill="Blue" Width="50" Height="50" Canvas.Left="0" Canvas.Top="0"/> <Button x:Name="myButton" Content="Animate" Width="100" Height="30" Canvas.Left="0" Canvas.Top="60"> <Button.Triggers> <EventTrigger RoutedEvent="Button.Click"> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetName="myEllipse" Storyboard.TargetProperty="(Canvas.Left)" To="200" Duration="0:0:3"/> </Storyboard> </BeginStoryboard> </EventTrigger> </Button.Triggers> </Button> </Canvas> ``` 3. 缩放动画:可以通过改变元素的大小来创建缩放效果。 ```xaml <Canvas> <Ellipse x:Name="myEllipse" Fill="Blue" Width="50" Height="50" Canvas.Left="0" Canvas.Top="0"/> <Button x:Name="myButton" Content="Animate" Width="100" Height="30" Canvas.Left="0" Canvas.Top="60"> <Button.Triggers> <EventTrigger RoutedEvent="Button.Click"> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetName="myEllipse" Storyboard.TargetProperty="Width" To="100" Duration="0:0:3"/> <DoubleAnimation Storyboard.TargetName="myEllipse" Storyboard.TargetProperty="Height" To="100" Duration="0:0:3"/> </Storyboard> </BeginStoryboard> </EventTrigger> </Button.Triggers> </Button> </Canvas> ``` 这些只是WPF动画的一小部分,WPF还提供了许多其他类型的动画,例如旋转、颜色、路径等。通过使用Storyboard和DoubleAnimation、ColorAnimation、PointAnimation等动画类,开发者可以轻松地创建各种动态效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值