【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 添加更多动画,甚至可以控制它们的播放顺序(如顺序播放或延迟播放),从而实现更复杂的动画效果。

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

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

相关文章

Qt:玩转QPainter序列九(文本,文本框,填充)

前言 继续承接序列八 正文 1. drawImage系列函数 绘制图像 inline void drawImage(const QPoint &p, const QImage &image); 作用: 在指定的点 p 上绘制 QImage 图像。图像的左上角将对齐到 p 点。 inline void drawImage(int x, int y, const QImage &image,…

ArkUI-状态管理-@Provide、@Consume、@Observed、@ObjectLink

ArkUI-状态管理 Provide装饰器和Consume装饰器&#xff1a;与后代组件双向同步概述观察变化框架行为Provide支持allowOverride参数 Observed装饰器和ObjectLink装饰器&#xff1a;嵌套类对象属性变化概述限制条件观察变化框架行为 Provide装饰器和Consume装饰器&#xff1a;与后…

Spring Security 有什么用?附使用教程

SecurityConfig 是一个 Spring Security 的配置类&#xff0c;用于配置应用程序的安全性。它主要用于定义如何保护应用程序的各种端点、身份验证和授权策略。SecurityConfig 在应用程序启动时被加载&#xff0c;并在整个应用程序生命周期中提供安全保护。 SecurityConfig的作用…

毕业设计选题系统

一、项目概述 Hi&#xff0c;大家好&#xff0c;今天分享的项目是《毕业设计选题系统》。 毕业论文选题是大学教学管理中的重要环节&#xff0c;关系到高校的教学质量。传统的手工管理方式工作效率低下、管理繁琐&#xff0c;浪费教师和学生的时间与精力的问题。本系统以提高…

87、k8s之污点

node 亲和性----nodename—nodeSelector ​ 软策略和硬策略 pod&#xff1a;亲和性 ​ 反亲和性 标签------>node节点的标签比app&#xff1a;nginx1标签优先级高 -------------------------------以上总结------------------------------------------ 一、污点 查看…

基于微信的热门景点推荐小程序的设计与实现(论文+源码)_kaic

摘 要 近些年来互联网迅速发展人们生活水平也稳步提升&#xff0c;人们也越来越热衷于旅游来提高生活品质。互联网的应用与发展也使得人们获取旅游信息的方法也更加丰富&#xff0c;以前的景点推荐系统现在已经不足以满足用户的要求了&#xff0c;也不能满足不同用户自身的个…

Leetcode面试经典150题-92.反转链表II

解法都在代码里&#xff0c;不懂就留言或者私信 比反转链表I略微难一点点 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, Li…

在移动应用程序中集成模糊方法的基于物联网的天气监测系统的实现

这篇论文的标题是《IMPLEMENTATION OF WEATHER MONITORING SYSTEM BASED INTERNET OF THINGS USING INTEGRATED FUZZY METHOD IN MOBILE APPLICATIONS》&#xff0c;作者是 Muhammad Malik Amin&#xff0c;来自 Politeknik Negeri Jakarta 的 D-IV INSTRUMENTASI DAN KONTROL …

代码随想录:62.不同路径

62. 不同路径 这道题是动态规划问题&#xff0c;主要是在初始化时考虑&#xff0c;我们可以初始dp[0][1]或dp[1][0]为1&#xff0c;其目的是为了让dp[1][1]为1&#xff0c;也就是起点进行初始化 class Solution { public:int uniquePaths(int m, int n) {int dp[200][200]{0}…

深度探索Unity与C#:编织游戏世界的奇幻篇章

在数字编织的梦幻之境中&#xff0c;Unity游戏引擎与C#编程语言如同双生子&#xff0c;共同编织着游戏世界的奇幻篇章。《Unity游戏开发实战&#xff1a;从零到C#高手》这本书&#xff0c;不仅仅是技术的堆砌&#xff0c;它更像是一位智慧导师&#xff0c;引领着我们深入探索这…

【HuggingFace Transformers】LlamaModel源码解析

LlamaModel源码解析 1. LlamaModel 介绍2. LlamaModel类 源码解析3. 4维因果注意力掩码生成 1. LlamaModel 介绍 LlamaModel 是一个基于 Transformer 架构的解码器模型&#xff0c;用于自然语言处理任务。它是 Meta 的 LLaMA (Large Language Model Meta AI) 系列的一部分&…

【基础】Three.js加载纹理贴图、加载外部gltf格式文件

1. 模型使用纹理贴图 const geometry new THREE.BoxGeometry(10, 10, 10);const textureLoader new THREE.TextureLoader(); // 创建纹理贴图加载器const texture textureLoader.load("/crate.gif"); // 加载纹理贴图const material new THREE.MeshLambertMater…

一款基于SpringBoot+Element Plus打造的进销存管理系统,方便二次开发或直接使用(附源码)

前言 当前市场上有许多进销存管理软件&#xff0c;但它们往往存在着一些痛点&#xff0c;比如灵活性不足、难以适应快速变化的需求&#xff0c;或者缺乏二次开发的支持。因此&#xff0c;我们需要一款既强大又灵活的软件来处理这些问题。 那么java进销存管理系统就是为了处理…

手把手写深度学习(27):如果获得相机位姿态的plücker embedding?以RealEstate10K为例

手把手写深度学习(0)&#xff1a;专栏文章导航 前言&#xff1a;用plücker embedding表示相机的位姿是一种非常常用的方法&#xff0c;这篇博客以RealEstate10K数据集为例子&#xff0c;详细讲解如何从相机的轨迹坐标中获得plücker embedding&#xff0c;用于下一步模型的学…

Java面试复习总结03

Java面试复习总结03 1、什么是SPI&#xff1f;2、SPI和API有什么区别&#xff1f;3、使用SPI机制的原因&#xff1f;4、SPI机制的优缺点&#xff1f; 1、什么是SPI&#xff1f; SPI 即 Service Provider Interface &#xff0c;字面意思就是&#xff1a;“服务提供者的接口”&…

Arduino library for proteus 下载 安装 测试

Arduino library include: https://drive.google.com/uc?exportdownload&id1P4VtXaomJ4lwcGJOZwR_25oeon9Zzvwb 第一步&#xff1a; 也可从我的共享网盘当中下载&#xff1a; 第2步&#xff1a;解压文件&#xff1a; 第3步&#xff1a; copy lib and idx 到对应的…

java宠物商城网站系统的设计与实现

springboot508基于Springboot宠物商城网站系统 题目&#xff1a;宠物商城网站系统的设计与实现 摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往…

PHP一站式班级解决方案班级管家系统小程序源码

一站式班级解决方案 —— 班级管家系统 &#x1f393;【开篇&#xff1a;班级管理的烦恼&#xff0c;你中招了吗&#xff1f;】&#x1f393; 作为班主任或班级管理者&#xff0c;你是否经常为繁琐的班级事务而头疼&#xff1f;从日常通知的发布到作业的收集&#xff0c;从班…

TOGAF之架构标准规范-架构愿景

TOGAF标准规范中&#xff0c;架构愿景阶段的主要工作包括定义企业架构的范围、确认企业架构的利益相关者、创建企业架构愿景、获得利益相关者的批准。 如上所示&#xff0c;架构愿景&#xff08;Architecture Vision&#xff09;在TOGAF标准规范中处于A阶段 如上所示&#xff0…

SpringBoot学习(4)(yml配置信息书写和获取)(SpringEL表达式语言)

目录 1、yml配置信息的书写和获取介绍 2、案例学习 &#xff08;1&#xff09;配置信息的书写注意事项 &#xff08;2&#xff09;配置信息的获取 &#xff08;3&#xff09;注解Value &#xff08;4&#xff09;相同层级的共同前缀&#xff0c;可以使用下面这个注解 3、…