WPF-关于动画Animation(及其常见问题)

目录

一、动画合集

常见动画类型

1、资源里添加动画资源

2、事件触发器里开始一个动画

3、Double型关键帧动画

4、Object型关键帧动画 

5、Color型关键帧动画

6、String型关键帧动画

7、Matrix型沿路径动画

二、扩展

Ⅰ 动画常见问题

1、控制动画结束问题

Ⅱ 流动Path

Ⅲ 变形


一、动画合集

创建一个Storyboard演示画板,在画板里对动画进行定义与处理。

常见动画类型

提醒:更多动画类型及介绍可查看:动画概述-WPF .NET Framework

DoubleAnimation                               //普通Double型控制动画

DoubleAnimationUsingKeyFrames //Double型关键帧动画

ObjectAnimationUsingKeyFrames  //Object型关键帧动画

ColorAnimationUsingKeyFrames    //Color型关键帧动画

StringAnimationUsingKeyFrames    //String型关键帧动画

MatrixAnimationUsingPath              //沿路径型动画

1、资源里添加动画资源

注意:开始动画得自己规划逻辑(触发器、事件都可)

     var storybd = this.FindResource("storybd") as Storyboard;storybd.Begin();
    <Window.Resources><Storyboard x:Key="storybd"><DoubleAnimation AutoReverse="True"By="0.1"RepeatBehavior="Forever"Storyboard.TargetName="btn"Storyboard.TargetProperty="Opacity"From="0.0" /><DoubleAnimation AutoReverse="True"RepeatBehavior="Forever"Storyboard.TargetName="btn"Storyboard.TargetProperty="(Control.Background).(RadialGradientBrush.GradientStops)[1].Offset"From="1"To="0"Duration="0:0:1" /></Storyboard></Window.Resources>

2、事件触发器里开始一个动画

        <Rectangle Name="Rect"Width="70"Height="80"Margin="279,0,0,0"HorizontalAlignment="Left"VerticalAlignment="Center"Fill="Green"><Rectangle.Triggers><EventTrigger RoutedEvent="Rectangle.Loaded"><BeginStoryboard><Storyboard><DoubleAnimation AutoReverse="True"RepeatBehavior="Forever"Storyboard.TargetName="Rect"Storyboard.TargetProperty="Opacity"From="1"To="0"Duration="0:0:1" /></Storyboard></BeginStoryboard></EventTrigger></Rectangle.Triggers></Rectangle>

3、Double型关键帧动画

<DoubleAnimationUsingKeyFrames AutoReverse="True"RepeatBehavior="Forever"Storyboard.TargetName="Rect"Storyboard.TargetProperty="(FrameworkElement.Width)"><EasingDoubleKeyFrame KeyTime="0:0:0" Value="0" />                        <EasingDoubleKeyFrame KeyTime="0:0:5" Value="70" />
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames AutoReverse="True"RepeatBehavior="Forever"Storyboard.TargetName="Rect"Storyboard.TargetProperty="(FrameworkElement.Height)"><EasingDoubleKeyFrame KeyTime="0:0:0" Value="0" /><EasingDoubleKeyFrame KeyTime="0:0:5" Value="80" />
</DoubleAnimationUsingKeyFrames>

4、Object型关键帧动画 

   <Window.Resources><Storyboard x:Key="story"><ObjectAnimationUsingKeyFrames Storyboard.TargetName="img" AutoReverse="True" RepeatBehavior="Forever" Storyboard.TargetProperty="(UIElement.Visibility)"><DiscreteObjectKeyFrame KeyTime="0:0:0.03" Value="{x:Static Visibility.Hidden}"/><DiscreteObjectKeyFrame KeyTime="0:0:0.06" Value="{x:Static Visibility.Visible}"/></ObjectAnimationUsingKeyFrames></Storyboard></Window.Resources>

5、Color型关键帧动画

      <Storyboard x:Key="story"><ColorAnimationUsingKeyFrames AutoReverse="True"RepeatBehavior="Forever"Storyboard.TargetName="btn"Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)"><EasingColorKeyFrame KeyTime="0" Value="Red" /><EasingColorKeyFrame KeyTime="0:0:0.5" Value="Blue" /><DiscreteColorKeyFrame KeyTime="0:0:1" Value="Red" /><DiscreteColorKeyFrame KeyTime="0:0:1.5" Value="Yellow" /></ColorAnimationUsingKeyFrames></Storyboard>

6、String型关键帧动画

FillBehavior,动画结束时行为

                        HoldEnd:保持在动画结束的最后一帧画面

                        Stop:动画结束,恢复动画开始前的画面

            <StringAnimationUsingKeyFrames FillBehavior="HoldEnd"Storyboard.TargetName="btn"Storyboard.TargetProperty="(Button.Content)"><DiscreteStringKeyFrame KeyTime="0" Value="5s" /><DiscreteStringKeyFrame KeyTime="0:0:1" Value="4s" /><DiscreteStringKeyFrame KeyTime="0:0:2" Value="3s" /><DiscreteStringKeyFrame KeyTime="0:0:3" Value="2s" /><DiscreteStringKeyFrame KeyTime="0:0:4" Value="1s" /><DiscreteStringKeyFrame KeyTime="0:0:5" Value="0s" /></StringAnimationUsingKeyFrames>

7、Matrix型沿路径动画

使用如下:

移动控件可用RenderTransformOrigin="0.5,0.5",切换位置转换的中心点;

DoesRotateWithTangent:按切换方向旋转;

PathGeometry:指定路径;

 <Rectangle.RenderTransform><MatrixTransform /></Rectangle.RenderTransform><MatrixAnimationUsingPath AutoReverse="True"DoesRotateWithTangent="True"PathGeometry="{StaticResource Path2}"RepeatBehavior="Forever"Storyboard.TargetName="Rect"Storyboard.TargetProperty="RenderTransform.Matrix"Duration="0:0:3" />

二、扩展

Ⅰ 动画常见问题

1、控制动画结束问题

 storyBoard.Begin(containObject,true);

注意:第二个参数(是否可控)必须给true才能控制动画停止;

2、开始动画失败

下方示例,运行会报错 :

                DoubleAnimation da = new DoubleAnimation(){From = 1,To = 0,AutoReverse = true,Duration = TimeSpan.FromSeconds(0.5),RepeatBehavior = RepeatBehavior.Forever};
//Button btn
btn.Background = Brushes.Yellow;
btn.Background.BeginAnimation(Brush.OpacityProperty, da);

原因在于:btn.Background = Brushes.Yellow;

 由于Brushes.Yellow为sealed 密封对象,所以其属性不能更改,若一个动画对其某属性值进行改变,就会报错;

解决,将该语句改成:

btn.Background=

        new SolidColorBrush((Color)ColorConverter.ConvertFromString("Yellow"));

Ⅱ 流动Path

 StrokeDashArray :分段长度

 StrokeDashOffset:分段偏移值(改变该值实现流动效果)

 StrokeDashArray="5"  StrokeDashOffset="{Binding OffSet}"

Ⅲ 变形

控制变形的属性:RenderTransform:呈现变形(定义在UIElement类中);

                             LayoutTransform:布局变形(定义在FrameworkElement类中);

 其数据类型都是Transform抽象类

 Transform派生类;

  • TranslateTransform:偏移变形,X设置右移动值,Y设置底部移动值;
  • RotateTransform:旋转变形,Angle设置旋转中心,CenterX与CenterY设置旋转中心;
  • ScaleTransform:缩放变形,ScaleX、ScaleY分别设置X、Y轴方向放大倍数;
  • SkewTransform:倾斜变形,可指定X轴和Y轴方向的倾斜角度;
  • TransformGroup:变形组(多个独立变形合成一个变形组),可同时执行多种变形;
  • MatrixTransform:矩阵变形,Matrix有6个值(M11,M12,M21,M22,OffsetX,OffsetY),M11和M22默认值1,用于在x和y方向上的伸缩,M12和M21默认值0,用于倾斜控件,OffsetX和OffsetY默认值为0,用于平移控件,当值(1,0,0,1,0,0)不改变元素,值(0.5,1.4,0.4,0.5,-200,0)会重置元素的大小、倾斜和平移元素;
<Button.RenderTransform><TransformGroup><TranslateTransform X="30" Y="-30"/><ScaleTransform ScaleX="0.8" ScaleY="0.8"/><RotateTransform Angle="40" CenterX="0" CenterY="0"/><SkewTransform AngleX="10" AngleY="10" CenterX="0" CenterY="0"/><MatrixTransform Matrix="1,0,0,1,0,0"/></TransformGroup>
</Button.RenderTransform>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/1666.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Centos7 的 Open Stack T 版搭建流程 --- (三)配置消息队列

配置消息队列 文章目录 配置消息队列&#xff08;1&#xff09;安装 RabbitMQ 服务并配置新用户权限controller &#xff08;2&#xff09;如何开启图形化&#xff08;拓展&#xff09; &#xff08;1&#xff09;安装 RabbitMQ 服务并配置新用户权限 controller yum install…

1115: 【C2】【字符串】【入门】最长最短单词

题目描述 输入1行句子&#xff08;不多于200个单词&#xff0c;每个单词长度不超过100&#xff09;&#xff0c;只包含字母、空格和逗号。单词由至少一个连续的字母构成&#xff0c;空格是单词间的间隔。 试输出第1个最长的单词和第1个最短单词。 输入 一行句子。 输出 两…

天星金融消保课堂开讲,金融健康意识再提升

近年来&#xff0c;随着消费者对投资理财等金融服务需求的日益增长&#xff0c;金融广告成为消费者获取金融信息的重要途径。然而&#xff0c;一些不法分子通过投放非法金融广告&#xff0c;诱导消费者参与非法金融活动&#xff0c;给消费者的权益带来了严重威胁。为此&#xf…

开源AI智能名片源码:虚实融合引领品牌营销新篇章

随着数字时代的飞速发展&#xff0c;品牌营销已经步入了一个全新的纪元。在这个变革的时代&#xff0c;开源AI智能名片源码以其独特的虚实融合功能&#xff0c;正引领着品牌营销走向更加智能化、个性化的道路。 传统的品牌营销往往局限于单向的信息传播&#xff0c;难以与用户产…

成都污水处理站运维厂家服务商

选择污水处理运维服务厂家时&#xff0c;需要考虑以下几个关键的事项来确保您选择了合适的服务提供商&#xff1a; 1. **资质和认证&#xff1a;** 确认厂家是否具备国家或地方政府颁发的相关环保和水处理行业资质、证书&#xff0c;比如ISO认证、水污染治理资质等&#xff0c;…

Nacos服务注册中心的下载与使用

1. Nacos是什么&#xff1f; https://nacos.io/ 官方&#xff1a;一个更易于构建云原生应用的动态服务发现(Nacos Discovery )、服务配置(Nacos Config)和服务管理平台。 集 注册中心配置中心服务管理 平台 Nacos 的关键特性包括: 服务发现和服务健康监测 动态配置服务 动…

手写一个Spring IOC框架

目录 一&#xff0c;Spring IOC 二&#xff0c;流程图设计 三&#xff0c;设计思路解析 三&#xff0c;开始写代码 1.准备工作: 2.扫描并加载类信息 3.初始化bean 4.测试一下 一&#xff0c;Spring IOC Spring IoC容器是Spring框架的核心&#xff0c;它通过读取配置信息…

Scala 复习笔记

元组&#xff1a; 元素类型一致 存取有序可重复 Seq ​ 无序不可重复 Set ​ 键值对 Map &#xff08;存储的就是Tuple2 &#xff0c;对偶元组&#xff09; 元素类型不一致 Tuple &#xff08;至多22个元素&#xff09; 代码&#xff1a; 定义 拆分 函数返回元组类型 遍历…

【每日刷题】Day20

【每日刷题】Day20 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 面试题 17.04. 消失的数字 - 力扣&#xff08;LeetCode&#xff09; 2. 189. 轮转数组 - 力扣&#…

随机森林(Random Forests)

通过5个条件判定一件事情是否会发生&#xff0c;5个条件对这件事情是否发生的影响力不同&#xff0c;计算每个条件对这件事情发生的影响力多大&#xff0c;写一个随机森林&#xff08;Random Forests&#xff09;模型程序,最后打印5个条件分别的影响力。 ChatGPT 下面是一个使…

后端获取请求体Body,将请求体进行解密放回Request请求,并能通过@RequestBody获取

目前系统发送的post和put请求都是没有加密数据。客户需要将请求体加密。而系统已经基本开发完成&#xff0c;不可能一个一个去修改发送的请求。就需要在发送请求时候在拦截器中将body进行加密。并且在后端进行请求过滤解密&#xff0c;并且能通过RequestBody继续获取对象。 1.…

matlab学习004-使用matlab绘制两个序列及信号的卷积波形图

目录 1&#xff0c;序列&#xff1a;x(n)u(n-2)-u(n-10)&#xff0c;h(n)((0.9)^n)*u(n) 1&#xff09;前期基础 ①conv函数 ②离散单位阶跃信号 2&#xff09;波形图 3&#xff09;代码 ①使用input方法 ②代码改进【推荐使用】 2&#xff0c;信号&#xff1a;xu(…

C语言趣味代码(二)

1.珠玑妙算 1.1 介绍 《珠玑妙算》(Mastermind)是英国Invicta公司于1973年开始销售的一款益智游戏&#xff0c;据说迄今为止已经在全世界销售了5000万套。《珠玑妙算》于1974年获奖后&#xff0c;在1975年传入美国&#xff0c;1976年leslieH.Autl博士甚至还出版了一本名为The…

Pytorch:张量的索引操作

文章目录 一、索引1.使用整数索引访问单个元素2.使用多个整数索引访问多个元素*a.示例详解b.示例c.一维索引示例 3.使用负数索引从张量的末尾开始计数4.使用布尔索引访问满足条件的元素*a.张量的元素级布尔操作b.布尔索引示例 5.torch.where()函数根据条件选择元素a.函数原型b.…

去雾笔记01-SRKTDN: Applying Super Resolution Method to Dehazing Task

文章目录 Abstract1. Introduction2. Related Work3. Method3.1. Network Architecture Abstract 们提出了一种结合超分辨方法和知识转移方法的模型。我们的模型由一个教师网络、一个去雾网络和一个超分辨率网络组成。 1. Introduction ECNU KT团队提出了一个知识蒸馏[20]模…

智慧养老平台|基于SprinBoot+vue的智慧养老平台系统(源码+数据库+文档)

智慧养老平台目录 基于SprinBootvue的外贸平台系统 一、前言 二、系统设计 三、系统功能设计 前台 后台 管理员功能 老人功能 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农…

控制台程序设置

该篇博客主要是对下一篇博客《贪吃蛇游戏》的设计做铺垫&#xff0c;大家可以持续关注(点个关注哦&#x1f60a;)等待更新&#xff0c;以下是个人主页&#xff1a; 敲上瘾-CSDN博客 在我们写的程序运行起来后弹出的框就是控制台程序。而这个窗口我们是可以对它进行设置的&…

终于找到恢复照片的绝佳方法了!手机照片恢复的看这里!

当今手机已经彻底离不开我们的生活&#xff0c;手机里面的数据也成为了我们高质量生活的重要构成&#xff0c;当手机内存爆满&#xff0c;我们就不得不采用清除部分手机数据的方法来释放空间。有一些数据删除后往往才发现还另有用处&#xff0c;比如手机里存储着的大量照片。 …

帆软报表实现通过js查询数据库设置表格数据

最近做的一直在做报表相关的需求&#xff0c;自己也是一边学一边做。有一个有意思的需求是在表格中某个单元格在编辑完以后其它的表格中的数据自动填充&#xff0c;当也是根据一定的规则与数据来源才能填充的。 先来点基础概念&#xff0c;就是帆软给我们提供了这个编辑后的事件…

使用Apache Cordova将H5游戏打包成apk

要将HTML5游戏转换成apk格式以供Android手机用户使用&#xff0c;有一种常用的方法是使用跨平台开发工具Apache Cordova。Cordova是一个开源框架&#xff0c;允许将网页应用程序打包为原生移动应用程序。下面是一个简单的步骤指南&#xff1a; 1. 准备工作&#xff1a;在您的电…