Windows Presentation Foundation (WPF)是一种用于创建Windows客户端应用程序的UI框架。它让我们能够创建丰富的图形界面,包括各种各样的动画效果。接下来,我们将介绍如何在WPF中创建简单的动画。文章最后将给出源码,源码包括文章中的动画和一个水印按钮,一个简单的时钟动画,一个复杂的时钟动画。

在WPF中,通常会使用以下的一些标签来创建和控制动画。

  1. Storyboard:

Storyboard 是 Window Presentation Foundation (WPF) 中一种强大的工具,可用于创建自定义动画效果。WPF 中的动画是通过变化特定属性的值来产生的,并且这些变化都是随时间而进行的。

Storyboard 主要特性和功能:

时间线控制: Storyboard 允许你控制动画时间线,包括开始时间,停止时间,持续时间等。

动画类型: Storyboard 支持各种类型的动画,如双精度动画,颜色动画,点动画等。

复杂动画: 通过组合多个动画效果,你可以创建复杂的动画。这可以通过在 Storyboard 中包含多个动画实现。

控制动画流程: Storyboard 提供了开始,暂停,恢复,停止等方法来控制动画的播放流程。

交互性: 在 XAML 中,可以通过Storyboard.TargetNameStoryboard.TargetProperty 属性来指定应用动画的对象与 property。

  1. Animation:

WPF中的动画通常通过更改属性的值来产生动画效果。例如,我们可以使用DoubleAnimation,它可以在指定的时间内将目标属性的值从一个浮点数改变为另一个浮点数。除了DoubleAnimation,WPF还提供了其他类型的Animation,如ColorAnimation、PointAnimation等。

  1. From, To, Duration:

From和To指定了动画的开始和结束值,而Duration决定了动画的持续时间。

  1. Storyboard.TargetName 和 Storyboard.TargetProperty:

这两个属性分别用于指定动画的目标对象和目标属性。

  1. Triggers:

Triggers类用于设定启动动画的条件。我们通常会在其中设定一些事件触发条件,比如按钮被点击。当事件被触发时,设定的动画效果就会开始执行。

以上就是WPF中常用的一些动画元素。要创建复杂的动画效果,你可能还需要了解更多的标签和属性,比如RepeatBehavior(用于设定动画的重复行为)、AutoReverse(用于设定动画播放结束后是否自动倒回)、KeyFrames(用于设定动画的关键帧)等等。

接下来,我们将介绍如何在WPF中创建简单的动画。

需要的工具:

Visual Studio

步骤 1:创建一个新的WPF项目

在Visual Studio中,通过点击文件 -> 新建 -> 项目来创建一个新的WPF应用程序。

步骤 2:向窗体中添加控件

在主窗口 MainWindow.xaml 文件中,我们将添加一个Button控件。我们将为此控件添加一个简单的动画效果。

<Window x:Class="WpfAnimationDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="WPF Animation Demo" Height="350" Width="525">
<Grid>
<Button Name="DemoButton" Content="Click me" Width="100" Height="50"/>
</Grid>
</Window>

步骤 3:编写动画效果

我们创建一个当用户点击按钮时执行的动画效果。这个效果将使按钮的宽度在1秒钟内扩大到200。

通过代码实现

给button增加Click方法

<Button x:Name="DemoButton" Width="100" Height ="100" Content="Animate Me!" Click="DemoButton_Click"
Grid.Row="0" Grid.Column="0"/>
private void DemoButton_Click(object sender, RoutedEventArgs e)
{
DoubleAnimation widthAnimation = new DoubleAnimation();
widthAnimation.From = 100; // 起始值
widthAnimation.To = 300; // 结束值
widthAnimation.Duration = new Duration(TimeSpan.FromSeconds(1)); // 动画长度 Storyboard storyboard = new Storyboard();
storyboard.Children.Add(widthAnimation); Storyboard.SetTarget(widthAnimation, DemoButton);
Storyboard.SetTargetProperty(widthAnimation, new PropertyPath(Button.WidthProperty)); storyboard.Begin();
}

这个方法是 DemoButton 的点击事件处理器。当点击这个按钮时,这个方法就会被调用。

点击时将会发生动画效果,按钮的宽度内部值从100逐渐变化到300,过程时间为1秒。这是通过WPF中的 Storyboard 和 DoubleAnimation 来完成的。

Storyboard 是动画的容器,而 DoubleAnimation 是这个动画的定义。设置起始值(From)、结束值(To)、动画的持续时间(Duration),并确认动画的目标(要改变的是哪个元素的哪个属性)。

最后,调用 Storyboard 的 Begin 方法以开始动画。

完整代码如下:

public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
} private void DemoButton_Click(object sender, RoutedEventArgs e)
{
DoubleAnimation widthAnimation = new DoubleAnimation();
widthAnimation.From = 100; // 起始值
widthAnimation.To = 300; // 结束值
widthAnimation.Duration = new Duration(TimeSpan.FromSeconds(2)); // 动画长度 Storyboard storyboard = new Storyboard();
storyboard.Children.Add(widthAnimation); Storyboard.SetTarget(widthAnimation, DemoButton);
Storyboard.SetTargetProperty(widthAnimation, new PropertyPath(Button.WidthProperty)); storyboard.Begin();
}
}

通过xaml实现

下面我们用xaml来实现同样的效果。

<Window ...>
    <!-- ... -->
<Grid>
<Button Name="DemoButton" Content="Click me" Width="100" Height="50">
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="myButton"
Storyboard.TargetProperty="Width"
From="100"
To="200"
Duration="0:0:1"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
</Grid>
</Window>
<Window ...>
    <!-- ... -->

这个<Window...>标签用于定义整个窗口的开始和结束。

<Grid>

是WPF内的一种特布面板标签,它提供了一个灵活的格子系统,用于在多行和多列中进行UI元素布局。

<Button Name="myButton" Content="Click me" Width="100" Height="50">

在这里,我们定义了一个按钮(Button)。Name属性是给按钮设定的名称,它在XAML和代码之间可以进行关联;Content属性设置按钮的文本为"Click me";Width和Height属性则设置了按钮的宽度和高度。

<Button.Triggers>

Triggers标签指定触发器,它定义在一定的条件下触发某些行为。

<EventTrigger RoutedEvent="Button.Click">

此处定义了一个EventTrigger事件触发器。该触发器在Button.Click事件——也就是按钮被点击的事件——发生时触发。

<BeginStoryboard>

BeginStoryboard会使得包含在其中的Storyboard开始播放。

<Storyboard>

Storyboard是WPF中对动画的最高级别的封装。一个Storyboard可以包含多个动画,这些动画会在BeginStoryboard命令下同步启动。

<DoubleAnimation Storyboard.TargetName="myButton"
Storyboard.TargetProperty="Width"
From="100"
To="200"
Duration="0:0:1"/>

这段代码定义了一个DoubleAnimation双值动画。

这个动画的目标对象通过Storyboard.TargetName属性设置为myButton,也就是我们前面定义的按钮控件;目标动画属性通过Storyboard.TargetProperty设定为Width;From和To属性定义了动画开始和结束时Width的值;Duration定义了动画从开始到结束的持续时间。这里设定的动画效果是,在1秒的时间内,按钮的宽度从100变为200。

                        </Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
</Grid>
</Window>

以上是各个元素的结束标签,用于指定相应元素的结束位置。

最终,这段XAML代码定义了一个窗口,窗口中有一个按钮。当该按钮被点击时,它的宽度将在1秒的时间内从100变为200,从而形成一个视觉上的动画效果。

步骤 4:运行你的动画

保存你的代码,运行程序,然后点击按钮观察动画效果。

代码位置: https://github.com/DXG88/WPF.Animation

原文地址:https://blog.baibaomen.com/wpf动画入门教程/

WPF动画入门教程的更多相关文章

  1. WebGL入门教程(三)-webgl动画

    前面文章: WebGL入门教程(一)-初识webgl WebGL入门教程(二)-webgl绘制三角形 WebGL动画有移动.旋转和缩放,我们将移动.旋转和缩放图形,然后将其绘制到屏幕上,称为变换(tr ...

  2. WPF入门教程系列二十三——DataGrid示例(三)

    DataGrid的选择模式 默认情况下,DataGrid 的选择模式为“全行选择”,并且可以同时选择多行(如下图所示),我们可以通过SelectionMode 和SelectionUnit 属性来修改 ...

  3. WPF入门教程系列三——Application介绍(续)

    接上文WPF入门教程系列二——Application介绍,我们继续来学习Application 三.WPF应用程序的关闭 WPF应用程序的关闭只有在应用程序的 Shutdown 方法被调用时,应用程序 ...

  4. WPF入门教程系列二——Application介绍

    一.Application介绍 WPF和WinForm 很相似, WPF与WinForm一样有一个 Application对象来进行一些全局的行为和操作,并且每个 Domain (应用程序域)中仅且只 ...

  5. WPF入门教程系列(二) 深入剖析WPF Binding的使用方法

    WPF入门教程系列(二) 深入剖析WPF Binding的使用方法 同一个对象(特指System.Windows.DependencyObject的子类)的同一种属性(特指DependencyProp ...

  6. WPF入门教程系列(一) 创建你的第一个WPF项目

    WPF入门教程系列(一) 创建你的第一个WPF项目 WPF基础知识 快速学习绝不是从零学起的,良好的基础是快速入手的关键,下面先为大家摞列以下自己总结的学习WPF的几点基础知识: 1) C#基础语法知 ...

  7. WPF入门教程系列一

    WPF入门教程 一.  前言  公司项目基于WPF开发,最近项目上线有点空闲时间写一篇基于wpf的基础教材,WPF也是近期才接触,学习WPF也是在网上查资料与微软的MSDN进行学习,写本博客的目为了温 ...

  8. CPF 入门教程 - 样式和动画(三)

    CPF NetCore跨平台UI框架 系列教程 CPF 入门教程(一) CPF 入门教程 - 数据绑定和命令绑定(二) CPF 入门教程 - 样式和动画(三) 用样式可以对内部元素进行批量设置属性. ...

  9. WPF/MVVM Quick Start Tutorial - WPF/MVVM 快速入门教程 -原文,翻译及一点自己的补充

    转载自 https://www.codeproject.com/articles/165368/wpf-mvvm-quick-start-tutorial WPF/MVVM Quick Start T ...

  10. CPF 入门教程 - 绘图(四)

    CPF NetCore跨平台UI框架,增加了Vlc支持跨平台播放视频. 系列教程 CPF 入门教程(一) CPF 入门教程 - 数据绑定和命令绑定(二) CPF 入门教程 - 样式和动画(三) CPF ...

随机推荐

  1. CHS、LAB地址

    CHS地址 CHS地址指的是柱面(Cylinder).磁头(Head).扇区(Sector)三个参数组成的地址,是用来表示磁盘上每个扇区位置的一种方式. 物理扇区号 = ((柱面号×磁头数) + 磁头 ...

  2. Spring Boot实现高质量的CRUD-1

    1.前言 ​ 在Spring Boot的SMM框架(SpringBoot+Mysql+Mybatis)的WEB项目中,CRUD(增删改查)大致占了50%-70%左右的工作量.提高CRUD的代码质量,提 ...

  3. 使用Mybatis生成树形菜单-适用于各种树形场景

    开发中我们难免会遇到各种树形结构展示的场景.比如用户登录系统后菜单的展示,某些大型购物网站商品的分类展示等等,反正开发中会遇到各种树形展示的功能,这些功能大概处理的思路都是一样的,所以本文就总结一下树 ...

  4. 用AI技术实现自动化的社交媒体广告投放,提高广告效果和收益

    目录 1. 引言 2. 技术原理及概念 2.1 基本概念解释 随着社交媒体的普及,广告投放已经成为了广告行业的重要一环.在过去的几年中,社交媒体广告投放的效果和收益都得到了显著提高,但同时也存在着一些 ...

  5. 使用Python接口自动化测试post请求和get请求,获取请求返回值

    引言我们在做python接口自动化测试时,接口的请求方法有get,post等:get和post请求传参,和获取接口响应数据的方法: 请求接口为Post时,传参方法我们在使用python中request ...

  6. 行行AI人才直播第7期:奇计AI创始人左晟《AI时代的商业挑战和机遇》

    行行AI人才是博客园和顺顺智慧共同运营的AI行业人才全生命周期服务平台,是园子商业化努力的一个重要方向. 行行AI人才直播希望以直播的方式让大家更多了解AI行业的现状与未来可能的发展方向. 随着人工智 ...

  7. RabbitMQ基本配置

    1.用户角色配置 自带的guest/guest 超级管理员五中不同角色配置: 普通管理者(management):仅可登陆管理控制台,无法看到节点信息,也无法对策略进行管理. 策略制定者(policy ...

  8. animation动画+关键帧实现轮播图效果(再次学习)!

    再次遇到要实现轮播图效果的时候,发现还是不怎么会,因为对js还没有熟练使用,只希望使用h5和css3实现效果 虽然之前已经学习了一遍了,但是还是不熟练,再次学习一下了 这次的可作为套板使用,无序列表为 ...

  9. spring-boot-plus2.7.12版本重磅发布,三年磨一剑,兄弟们等久了,感谢你们的陪伴

    Everyone can develop projects independently, quickly and efficiently! spring-boot-plus是一套集成spring bo ...

  10. [SDOI2008] 仪仗队【题解】

    题目描述 作为体育委员,C 君负责这次运动会仪仗队的训练.仪仗队是由学生组成的 \(N \times N\) 的方阵,为了保证队伍在行进中整齐划一,C 君会跟在仪仗队的左后方,根据其视线所及的学生人数 ...