ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C#WPF(动画)

2021-05-10 18:31:41  阅读:167  来源: 互联网

标签:动画 触发器 Storyboard C# FillBehavior WPF 默认值 属性


在动画中,可以使用移动的元素、颜色变化、变换等制作平滑的变换效果。WPF使动画的制作非常简单。还可以连续改变任意依赖属性的值。不同的动画类可以根据其类型,连续改变不同属性的值。

动画的主要元素如下:

  • 时间轴---定义了值随时间的变化方式。有不同类型的时间轴,可用于改变不同类型的值。所有时间轴的基类都是Timeline。为了连续改变double值,可以使用DoubleAnimation类。Int32Animation类是int值的动画类。PointAnimation类用于连续改变点,ColorAnimation类用于连续改变颜色。
  • 故事板---用于合并动画。Storyboard类派生自基类TimelineGroup,TimelineGroup又派生自基类Timeline。使用DoubleAnimation类,可以连续改变double,使用Storyboard类可以合并所有应连接在一起的动画。
  • 触发器---通过触发器可以启动和停止动画。前面介绍了属性触发器,当属性值变化时,属性触发器就会激活。还可以创建事件触发器,当事件发生时,事件触发器就会激活。 

添加一个当Loaded完成后让椭圆的宽度自动变化的XAML代码: 

<Window x:Class="WpfAppLearn1.TimeLine"
        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:WpfAppLearn1"
        mc:Ignorable="d"
        Title="TimeLine" Height="450" Width="439">
    <Canvas>
        <Ellipse x:Name="ellipse" Height="100" Width="100" Canvas.Left="45" Canvas.Top="180" Fill="Red">
            <Ellipse.Triggers>
                <EventTrigger RoutedEvent="Ellipse.Loaded">
                    <EventTrigger.Actions>
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetProperty="Width" RepeatBehavior="1x" 
                                                 Duration="0:0:6" AutoReverse="True" 
                                                 FillBehavior="Stop" From="100" To="300" 
                                                 Completed="DoubleAnimation_Completed"/>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger.Actions>
                </EventTrigger>
            </Ellipse.Triggers>
        </Ellipse>
    </Canvas>
</Window>
Timeline属性说明
AutoReverse指定连续改变的值是否在动画结束后返回初始值(默认为False)
SpeedRatio可以改变动画的移动速度。在这个属性中,可以定义父子元素的相对关系。(默认值为1)
BeginTime

指定从触发器事件激活到动画开始移动之间的时间长度,即延时启动动画。

(默认值为0,值可以为null表示永不播放)

这和SpeedRatio属性有关:若将SpeedRatio设置为2,把BeginTime设置为6秒,动画就在3秒后开始。

AccelerationRatio定义加速度(默认值为0)(在动画中,值不一定是线性变化的。可以指定加减速度)
DecelerationRatio定义减速度(默认值为0)(和加速度的总和不能超过1)
Duration指定动画重复一次的时间长度
RepeatBehavior指定动画的重复次数或者重复时间(默认值为1)
FillBehavior

指定动画在到达其有效期末尾后的行为。(默认值为HoldEnd)

  • HoldEnd:在达到活动期的终点后,时间线将保持其进度,直至其父级的活动期和保持期结束为止
  • Stop:如果时间线超出活动期,而其父级在活动期内,则该时间线将停止

这里说明一下FillBehavior的用法:

可以看到XAML中有一个Completed属性,这是一个事件表示动画完成后的响应。

private void DoubleAnimation_Completed(object sender, EventArgs e)
{
    this.ellipse.Width = 10;
}
  • 若是将FillBehavior设置为HoldEnd的话,响应事件后并不会将Width设置为10,因为时间线并没有停止,如果去单独加个按钮设置也一样。只有该为Stop停止时间线后设置才有效。
  • Storyboard其实也继承于Timeline,也可以对其设置上表中的值。当对Storyboard设置任一个属性后,所有属于Storyboard的Timeline的FillBehavior值都以Storyboard的FillBehavior为准。

 

标签:动画,触发器,Storyboard,C#,FillBehavior,WPF,默认值,属性
来源: https://blog.csdn.net/breakbridge/article/details/116598903

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有