当前位置: 首页 > news >正文

【WPF动画】

关于 WPF 中 System.Windows.Media.Animation 命名空间下常用动画类的简要介绍、使用方法和适用场景的表格

      • 使用场景解释:
      • 示例代码1
      • 示例代码2:使用 `Storyboard` 组合多个动画
      • 代码解释
      • 应用场景

动画类描述使用示例适用场景
DoubleAnimation用于为 double 类型的属性(如 Width, Height 等)创建动画。xml <DoubleAnimation From="0" To="100" Duration="0:0:2" />控件大小的变化、透明度的渐变等。
ColorAnimation用于为 Color 类型的属性(如 Background, Foreground 等)创建动画。xml <ColorAnimation From="Red" To="Blue" Duration="0:0:2" />背景色、前景色的渐变效果。
PointAnimation用于为 Point 类型的属性(如 Center, Position 等)创建动画。xml <PointAnimation From="0,0" To="100,100" Duration="0:0:2" />控件位置的变化、路径动画。
ThicknessAnimation用于为 Thickness 类型的属性(如 Margin, Padding 等)创建动画。xml <ThicknessAnimation From="0,0,0,0" To="20,20,20,20" Duration="0:0:2" />控件的内外边距动画效果。
VectorAnimation用于为 Vector 类型的属性(如 GradientStop.Offset 等)创建动画。xml <VectorAnimation From="0,0" To="100,100" Duration="0:0:2" />渐变偏移动画。
ObjectAnimationUsingKeyFrames用于为非数值类型的属性(如 Visibility 等)创建动画。xml <ObjectAnimationUsingKeyFrames><DiscreteObjectKeyFrame Value="Visible" KeyTime="0:0:1" /><DiscreteObjectKeyFrame Value="Hidden" KeyTime="0:0:2" /></ObjectAnimationUsingKeyFrames>控件显示状态的渐变(Visible, Hidden, Collapsed)。
Storyboard控制一组动画的时序和执行。xml <Storyboard><DoubleAnimation ... /></Storyboard>将多种动画组合成复杂动画效果。
BooleanAnimationUsingKeyFramesbool 类型的属性创建动画。xml <BooleanAnimationUsingKeyFrames><DiscreteBooleanKeyFrame Value="True" KeyTime="0:0:1" /><DiscreteBooleanKeyFrame Value="False" KeyTime="0:0:2" /></BooleanAnimationUsingKeyFrames>控件的启用状态等布尔属性的变化。
RectAnimationRect 类型的属性(如 Clip, Viewbox 等)创建动画。xml <RectAnimation From="0,0,100,100" To="50,50,150,150" Duration="0:0:2" />剪裁区域、视图框的动画。
Int32Animation用于为 int 类型的属性(如 Count, Index 等)创建动画。xml <Int32Animation From="0" To="10" Duration="0:0:2" />列表项的计数变化等。

使用场景解释:

  • DoubleAnimation: 当你需要平滑地改变控件的大小、位置、透明度等属性时,使用 DoubleAnimation 是最常见的选择。
  • ColorAnimation: 适用于颜色过渡效果,比如当按钮被点击时改变背景色。
  • PointAnimation: 可以用来控制图形对象的移动,尤其是在 Path 动画中。
  • ThicknessAnimation: 用于边距或填充的动画,例如在控件被悬停时动态改变其边距。
  • VectorAnimation: 适用于渐变背景的动画效果,特别是在复杂的渐变操作中。
  • ObjectAnimationUsingKeyFrames: 适用于非数值属性的离散变化,比如在特定时间点改变控件的 Visibility
  • Storyboard: 适合在复杂动画场景中同时控制多种动画的执行顺序和同步。
  • BooleanAnimationUsingKeyFrames: 适用于布尔值的动画,比如启用/禁用控件。
  • RectAnimation: 适用于剪裁和视图框动画,尤其是在处理图像或视频剪裁时。
  • Int32Animation: 适用于整数属性的变化,比如动画化索引或计数。

示例代码1

要使用这些动画类,可以在 XAML 中直接定义,也可以在 C# 代码中以编程方式创建和启动。例如,Storyboard 可以包含多种动画,并通过 Begin 方法启动:

<Button Content="Animate" Name="button"><Button.Triggers><EventTrigger RoutedEvent="Button.Click"><BeginStoryboard><Storyboard><DoubleAnimation Storyboard.TargetName="button" Storyboard.TargetProperty="Width" From="100" To="300" Duration="0:0:2" /></Storyboard></BeginStoryboard></EventTrigger></Button.Triggers>
</Button>

示例代码2:使用 Storyboard 组合多个动画

<Window x:Class="WpfApp1.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="MainWindow" Height="300" Width="400"><Grid><Button x:Name="MyButton" Content="Click Me" Width="100" Height="50" HorizontalAlignment="Center" VerticalAlignment="Center"><Button.Triggers><EventTrigger RoutedEvent="Button.Click"><BeginStoryboard><Storyboard><!-- 宽度动画 --><DoubleAnimation Storyboard.TargetName="MyButton" Storyboard.TargetProperty="Width" From="100" To="200" Duration="0:0:2" /><!-- 高度动画 --><DoubleAnimation Storyboard.TargetName="MyButton" Storyboard.TargetProperty="Height" From="50" To="100" Duration="0:0:2" /><!-- 颜色动画 --><ColorAnimation Storyboard.TargetName="MyButtonBackground" Storyboard.TargetProperty="Color" From="LightBlue" To="LightCoral" Duration="0:0:2" /><!-- 旋转动画 --><DoubleAnimation Storyboard.TargetName="MyButton" Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)" From="0" To="360" Duration="0:0:2" /></Storyboard></BeginStoryboard></EventTrigger></Button.Triggers><!-- 添加背景颜色的动画目标 --><Button.Background><SolidColorBrush x:Name="MyButtonBackground" Color="LightBlue"/></Button.Background><!-- 添加旋转变换 --><Button.RenderTransform><RotateTransform Angle="0" /></Button.RenderTransform><Button.RenderTransformOrigin>0.5,0.5</Button.RenderTransformOrigin></Button></Grid>
</Window>

代码解释

  1. 宽度动画 (DoubleAnimation):

    • 目标是按钮的 Width 属性。
    • 动画将按钮的宽度从 100 增加到 200,持续时间为 2 秒。
  2. 高度动画 (DoubleAnimation):

    • 目标是按钮的 Height 属性。
    • 动画将按钮的高度从 50 增加到 100,持续时间为 2 秒。
  3. 颜色动画 (ColorAnimation):

    • 目标是按钮的背景颜色。
    • 动画将按钮的背景色从 LightBlue 渐变到 LightCoral,持续时间为 2 秒。
  4. 旋转动画 (DoubleAnimation):

    • 目标是按钮的旋转角度。
    • 动画将按钮顺时针旋转 360 度,持续时间为 2 秒。
  5. Storyboard:

    • 将以上所有动画组合在一起,在按钮点击时同时播放这些动画,形成一个复杂的动画效果。
  6. RenderTransform:

    • 为按钮添加一个旋转变换,以便旋转动画能够正常工作。

应用场景

这个 Storyboard 示例展示了如何在用户点击按钮时,创建一个包括尺寸变化、颜色渐变和旋转的复杂动画。这种技术非常适合在用户界面中创建引人注目的效果,比如点击反馈、过渡效果或者引导用户注意某个特定控件。

你可以根据需要向 Storyboard 添加更多动画,甚至可以控制它们的播放顺序(如顺序播放或延迟播放),从而实现更复杂的动画效果。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 内存管理(三)--Linux CMA内存使用
  • 巧用xrename批量重命名下载的影视文件
  • SQL-函数
  • Open3D 基于曲率大小的特征点提取
  • 微信小程序中如何监听元素进入目标元素
  • stm32F103 串口2 中断 无法接收指定字符串 [已解决]
  • 用idea写Spark程序时,想要在控制台打印日志?
  • class 6: vue.js 3 组件化开发
  • 微服务--Nacos配置管理
  • axios返回的是promise对象如何处理?
  • Mysql高阶语句(1)
  • Python教程:使用 Python 和 PyHive 连接 Hive 数据库
  • HALCON 错误代码 #7709
  • 缓存分布式一致性问题
  • Golang 小项目(3)
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • java 多线程基础, 我觉得还是有必要看看的
  • Java基本数据类型之Number
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • spring boot下thymeleaf全局静态变量配置
  • 爱情 北京女病人
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 给新手的新浪微博 SDK 集成教程【一】
  • 蓝海存储开关机注意事项总结
  • 入手阿里云新服务器的部署NODE
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 微信公众号开发小记——5.python微信红包
  • 详解NodeJs流之一
  • 小程序开发中的那些坑
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ‌‌雅诗兰黛、‌‌兰蔻等美妆大品牌的营销策略是什么?
  • #pragma data_seg 共享数据区(转)
  • #单片机(TB6600驱动42步进电机)
  • #职场发展#其他
  • (1)Nginx简介和安装教程
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (4)事件处理——(7)简单事件(Simple events)
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (三分钟)速览传统边缘检测算子
  • (十五)使用Nexus创建Maven私服
  • (一)、python程序--模拟电脑鼠走迷宫
  • (一)模式识别——基于SVM的道路分割实验(附资源)
  • (一)项目实践-利用Appdesigner制作目标跟踪仿真软件
  • (转载)OpenStack Hacker养成指南
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .net 7和core版 SignalR
  • .net Application的目录
  • .net core 6 集成和使用 mongodb