WPF动画详解(二)

本文详细介绍了WPF中如何在C#后台代码和XAML中使用BeginAnimation()方法实现动画效果,重点讲解了WPF的三种触发器类型:属性触发器、数据触发器和事件触发器,以及如何通过事件触发器控制动画的开始和暂停。此外,还讨论了如何在XAML中设置事件触发器,并提供了具体的代码示例。文章还提到了线性动画的卡顿问题,指出使用缓动函数可以实现更自然的动画过渡。最后,讨论了WPF动画的性能优化,包括理想的帧速率和如何通过DesiredFrameRate属性调整帧率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WPF在C#后台代码中使用BeginAnimation()方法来使动画产生效果,等同于XAML代码,将动画指定到合适的元素和属性。在XAML中,通常是需要触发器来触发效果的。而WPF触发器有这三种基本类型:属性触发器、数据触发器以及事件触发器,可以在触发器中设置页面加载或者鼠标移入/移出事件。使用触发器是关联动画的最常用方式,但并不是唯一的选择。当创建事件触发器时,需要指定开始触发器的路由事件和触发器执行的一个或多个动作。对于动画,最常用的动作是BeginStoryboard,该动作相当于调用BeginAnimation()方法。所有事件触发器都可以启动动作,所有动作都由继承自System.Windows.TriggerAction的类表示,事件触发器可以在以下4个位置定义事件触发器:

在样式中(Style.Triggers集合)。

在数据模板中(DataTemplate.Triggers集合)。

在控件模板中(ControlTemplate.Triggers集合)。

直接在元素中定义事件触发器(FrameworkElement.Triggers集合)

前期说了C#后台代码控制动画,在XAML中,仍然可以设置多个动画,同步和控制动画

<Window.Triggers>

        <!--开始事件-->

        <EventTrigger RoutedEvent="Button.Click" SourceName="btn_start">

            <BeginStoryboard Name="beginstoryboard1">

                <Storyboard>

                    <DoubleAnimation Storyboard.TargetName="img" Storyboard.TargetProperty="Opacity" From="1" To="0" Duration="0:0:6"></DoubleAnimation>

                </Storyboard>

            </BeginStoryboard>

        </EventTrigger>

        <!--停止动画-->

        <EventTrigger RoutedEvent="Button.Click" SourceName="btn_pause">

            <PauseStoryboard BeginStoryboardName="beginstoryboard1"></PauseStoryboard>

        </EventTrigger>

    </Window.Triggers>

    <Grid>

        <Grid.RowDefinitions>

            <RowDefinition Height="106*"></RowDefinition>

            <RowDefinition Height="29*"></RowDefinition>

        </Grid.RowDefinitions>

        <Image Name="img" Source="9.jpg" Margin="0,0,-0.4,1"></Image>

        <Grid Grid.Row="1" Margin="0,3,-0.4,0.4">

            <Grid.ColumnDefinitions>

                <ColumnDefinition></ColumnDefinition>

                <ColumnDefinition></ColumnDefinition>

            </Grid.ColumnDefinitions>

            <Button Name="btn_start" Content="开始" Margin="10" FontSize="20" Grid.Column="0"></Button>

            <Button Name="btn_pause" Content="暂停" Margin="10" FontSize="20" Grid.Column="1"></Button>

        </Grid>

</Grid>

线性动画有一个缺点,就是看起来会有点卡顿。所以需要设计根据某种方式加速或减速的动画,实现更趋自然的动画,要使用预置的缓动函数(EasingFunction)。EasyingFunction属性只能接受单个缓动函数对象,不能为同一个动画结合不同的缓动函数。

通常,为用户界面应用动画,只不过是创建并配置正确的动画和故事版对象。但在其他情况下,特别是同时发生多个动画时,可能更加需要关注性能。WPF试图保持以60帧/秒的速度进行动画,可以确保从开始到结束得到平滑流畅的动画。帧速率越低,会发生抖动现象。帧速率越高,占用的 CPU也就越高。通过TimeLine.DesiredFrameRate属性进行调整

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值