WPF路径动画

article/2025/10/24 13:48:38

特此声明:本文为CSDN博主「田野上的风筝」,原文地址:https://blog.csdn.net/weixin_43100896/article/details/87899883。感谢大佬的总结, 下文为转载内容。

在WPF中实现动画并不是什么困难的事,因为WPF提供了动画模型和强大的类库,其中WPF中的三种基本动画:线插性值动画、关键帧动画、路径动画,这三种动画都在system.Windows.Media.Animation这个命名空间。

路径动画:基于路径的动画,通过修改数值使其符合PathGeometry对象描述的形状,并让元素沿着路径进行移动从而达到动画效果。以下是三个路径动画类

MatrixAnimationUsingPath

这个是路径动画比较常用的一个类

例:首先绘制一个几何,再在Storyboard里使用DoubleAnimationUsingPath设置属性

Duration:动画持续时间

RepeatBehavior:动画的重复行为 值可以为Forever(永久),也可以根据需求设置动画的时间。

DoesRotateWithTangent:设置这个属性后可根据路径的坡度来移动

<Canvas><Canvas.Resources><!--绘制几何图形--><PathGeometry x:Key="path"><PathFigure StartPoint="40,40" IsClosed="True"><LineSegment Point="40,130"></LineSegment><ArcSegment Point="60,150" Size="20,20" ></ArcSegment><LineSegment Point="200,150"></LineSegment><ArcSegment Point="220,130" Size="20,20"></ArcSegment><LineSegment Point="220,40"></LineSegment><ArcSegment Point="200,20" Size="20,20"></ArcSegment><LineSegment Point="60,20"></LineSegment><ArcSegment Point="40,40" Size="20,20"></ArcSegment></PathFigure></PathGeometry><Storyboard x:Key="pathStoryboard" ><MatrixAnimationUsingPath PathGeometry="{StaticResource path}" Storyboard.TargetName="ButtonMatrixTransform"Storyboard.TargetProperty="Matrix"DoesRotateWithTangent="True"Duration="0:0:5" RepeatBehavior="Forever" ></MatrixAnimationUsingPath></Storyboard></Canvas.Resources><Canvas.Triggers><EventTrigger RoutedEvent="Control.Loaded"><BeginStoryboard Storyboard="{StaticResource pathStoryboard}" /></EventTrigger></Canvas.Triggers><Path Data="{StaticResource path}" Stroke="Black" StrokeThickness="1" /><Ellipse Fill="#eee" Width="20" Height="20" ><Ellipse.RenderTransform><MatrixTransform x:Name="ButtonMatrixTransform" /></Ellipse.RenderTransform></Ellipse></Canvas>

定义好Storyboard后通过触发器来触发动画。

DoubleAnimationUsingPath

通过控制对象的MatrixTransform (X、Y和Angle)实现路径变化达到动画效果。

<Canvas  Grid.Row="2"><Canvas.Resources><PathGeometry x:Key="path"><PathFigure StartPoint="40,40" IsClosed="True"><LineSegment Point="40,130"></LineSegment><ArcSegment Point="60,150" Size="20,20" ></ArcSegment><LineSegment Point="200,150"></LineSegment><ArcSegment Point="220,130" Size="20,20"></ArcSegment><LineSegment Point="220,40"></LineSegment><ArcSegment Point="200,20" Size="20,20"></ArcSegment><LineSegment Point="60,20"></LineSegment><ArcSegment Point="40,40" Size="20,20"></ArcSegment></PathFigure></PathGeometry><Storyboard x:Key="pathStoryboard" ><DoubleAnimationUsingPath PathGeometry="{StaticResource path}"Storyboard.TargetName="translateTransform"Storyboard.TargetProperty="X"Source="X"Duration="0:0:5" RepeatBehavior="Forever" ></DoubleAnimationUsingPath><DoubleAnimationUsingPath PathGeometry="{StaticResource path}"Storyboard.TargetName="translateTransform"Storyboard.TargetProperty="Y"Source="Y"Duration="0:0:5" RepeatBehavior="Forever" ></DoubleAnimationUsingPath></Storyboard></Canvas.Resources><Canvas.Triggers><EventTrigger RoutedEvent="Control.Loaded"><BeginStoryboard Storyboard="{StaticResource pathStoryboard}" /></EventTrigger></Canvas.Triggers><Path Data="{StaticResource path}" Stroke="Black" StrokeThickness="1" /><Path Fill="#eee"><Path.Data><EllipseGeometry x:Name="ellipses" Center="5,5" RadiusX="12" RadiusY="12"/></Path.Data><Path.RenderTransform><TranslateTransform x:Name="translateTransform" /></Path.RenderTransform></Path></Canvas>

PointAnimationUsingPath 靠中心点确定位置的形状

 <Canvas Grid.Row="1" ><Canvas.Resources><PathGeometry x:Key="path" Figures="M 10,100 C 35,0 135,0 160,100 180,190 285,200 310,100" /><Storyboard x:Key="pathStoryboard" ><PointAnimationUsingPath PathGeometry="{StaticResource path}"Storyboard.TargetName="ellipse"Storyboard.TargetProperty="Center"Duration="0:0:5" RepeatBehavior="0:0:8" ></PointAnimationUsingPath></Storyboard></Canvas.Resources><Canvas.Triggers><EventTrigger RoutedEvent="Control.Loaded"><BeginStoryboard Storyboard="{StaticResource pathStoryboard}" /></EventTrigger></Canvas.Triggers><Path Data="{StaticResource path}" Stroke="Black" StrokeThickness="1" /><Path Fill="#eee"><Path.Data><EllipseGeometry x:Name="ellipse" Center="5,5" RadiusX="12" RadiusY="12"/></Path.Data></Path></Canvas>


http://chatgpt.dhexx.cn/article/ccZAacsU.shtml

相关文章

10路径动画

using System.Collections; using System.Collections.Generic; using System.Linq; using DG.Tweening; using UnityEngine;public class PathMove : MonoBehaviour {public Transform[] pointList;void Start(){//select方法,直接得到值,查询要返回的目标数据 int[] numm {…

服务器连接超时是怎么回事呢?

服务器连接超时就是在程序默认的等待时间内没有得到服务器的响应。 网络连接超时可能的原因有那些呢&#xff1f; 1、网络断开&#xff0c;不过经常显示无法连接。网络阻塞&#xff0c;导致你不能在程序默认等待时间内得到回复数据包。 2、网络不稳定&#xff0c;网络无法完整…

服务器时间修改连接超时时间,服务器设置网络连接超时时间设置

服务器设置网络连接超时时间设置 内容精选 换一换 有以下几种现象:将制作好的SD卡插入开发者板并上电后,开发者板LED1与LED2灯状态信息异常。将制作好的SD卡插入开发者板,并通过USB方式连接Ubuntu服务器,上电、开发者板启动完成后,Ubuntu服务器无虚拟网卡信息。将制作好的…

修改服务器超时时间,服务器超时时间设置

服务器超时时间设置 内容精选 换一换 在压测过程中能够提供自身性能数据的施压目标机器。管理执行机的节点。CPTS为用户的测试工程提供管理能力,事务、压测任务、测试报告的内容在同一个测试工程内共享复用,您可以为不同的测试项目创建不同的测试工程。事务是指用户自定义的操…

FinalShell连接超时解决方法

输入ipconfig查看是否自动更改了ip地址 如果ip地址有变动&#xff0c;在shell中更改 查看是否打开了vm服务 快捷键&#xff1a;win X 选择“计算机管理&#xff08;G&#xff09;” 下滑找到vm服务&#xff0c;如若关闭打开即可 查看是否打开vm网络连接 右键点击属性,勾选所示…

finalshell连接超时怎么办

错误提示&#xff1a;java.net.ConnectException: Connection timed out: connect 在Linux中输入ip addr 来查看ip地址是否还在 如果没有的话重启虚拟机&#xff0c;出现ip地址再进行ssh连接

光猫显示连接isp服务器超时,光猫链接isp服务器超时

光猫链接isp服务器超时 内容精选 换一换 若已有连接后端服务器超过请求超时时间没有请求传输后,ELB会将其断开。根据负载均衡器与后端服务器链接的协议不同,系统默认超时时间也不同,系统默认的超时时间如下。TCP协议:默认超时时间为300s。UDP协议:默认超时时间为10s。HTTP…

服务器时间修改连接超时时间设置,云服务器连接超时时间设置

云服务器连接超时时间设置 内容精选 换一换 配置高防IP服务后,网站执行某些POST请求时,长时间等待后返回504错误,执行不成功。此问题是由于请求处理时间过长,已超过高防IP服务的连接阈值,高防IP服务主动断开连接。TCP默认连接超时时间为900s。HTTP/WebSocket、HTTPS/WebSo…

putty连接服务器显示连接超时,putty连接云服务器超时连接

putty连接云服务器超时连接 内容精选 换一换 文档数据库服务提供使用数据管理服务(Data Admin Service,简称DAS)、内网和公网的连接方式。文档数据库服务默认为您开通了远程主机登录权限,推荐您使用更安全便捷的数据管理服务连接实例,具体请参见通过数据管理服务连接集群实例…

apex显示服务器连接超时,apex与服务器链接超时

apex与服务器链接超时 内容精选 换一换 使用mount命令挂载文件系统到云服务器,云服务器系统提示timed out。原因1:网络状态不稳定。原因2:网络连接异常。原因3:云服务器DNS配置错误,导致解析不到文件系统的域名,挂载失败。SFS Turbo文件系统不存在此问题。原因4:挂载的是…

光猫显示isp服务器断开,光猫连接isp服务器超时

光猫连接isp服务器超时 内容精选 换一换 在使用负载均衡服务时,确保至少有一台后端服务器在正常运行,可以接收负载均衡转发的客户端请求。如果请求的需求流量上升,用户需要向负载均衡器添加更多后端服务器处理需求。移除负载均衡器绑定的后端服务器,后端服务器将不再收到负…

网页 游戏服务器连接超时,连接游戏服务器超时怎么解决

连接游戏服务器超时怎么解决 内容精选 换一换 调用API出错后,将不会返回结果数据。调用方可根据每个API对应的错误码来定位错误原因。当调用出错时,HTTP请求返回一个4xx或5xx的HTTP状态码。返回的消息体中是具体的错误代码及错误信息。在调用方找不到错误原因时,可以联系客服…

【uniapp/hBuilder】使用部分插件(如uni-file-picker)后出现连接服务器超时的解决方法

在uniapp项目中&#xff0c;导入uni-file-picker等一些组件可能会使相关页面变成&#xff08;但是其他页面正常运行&#xff09;&#xff1a; 这是由于该组件需要你绑定uniapp的服务空间运行。&#xff08;当然也可以不绑定&#xff0c;你可以选择手动上传的方式&#xff09;…

uni-app 编译成H5页面运行,提示“连接服务器超时,请点击屏幕重试”

现象 参考文档&#xff1a; uni-app H5端 “网络不给力” 排查日记 备注&#xff1a; 不一定是网络问题&#xff0c;有可能是代码问题&#xff0c;不要被提示忽悠了&#xff0c;记得看控制台代码&#xff0c;代码报错解决了&#xff0c;报错也就解决了 history 模式。跳转页…

uniapp 发布h5后报错,连接服务器超时,点击屏幕重试

更新文件到linux 也更新不上去 解决方法&#xff1a; 文件目录层级太深了&#xff0c;直接把项目文件放到D盘

金蝶显示服务器连接超时,金蝶连接云服务器超时

金蝶连接云服务器超时 内容精选 换一换 当云服务器网络异常、防火墙未放行本地远程桌面端口、云服务器CPU负载过高等场景均可能导致云服务器无法正常登录。当您的云服务器无法远程登录时,我们建议您首先检查是否可以通过控制台远程登录。再参考排查思路检查登录异常的原因。远…

ios系统连接服务器超时时间,正则零宽导致iOS端uni-app报错:连接服务器超时,点击重试...

一个 H5 项目中使用安卓设备一切正常,用 iOS 就显示 连接服务器超时,点击屏幕重试。 排查了半天,原来是正则引起的。 可能会报以下错误: Invalid regular expression: invalid group specifier name [system] SyntaxError{} Info Warn Error SyntaxError: Invalid regular …

vmware虚拟机连接服务器超时,vmware连接远程服务器超时

vmware连接远程服务器超时 内容精选 换一换 已成功添加Guardian。如果Guardian处于在线状态,只允许修改Guardian名称。如果Guardian处于连接超时状态,可以输入登录远程服务器的用户名和密码重新部署Guardian。如果Guardian处于在线状态,只允许修改Guardian名称。如果Guardia…

监控显示服务器超时,监控连接服务器超时怎么解决

监控连接服务器超时怎么解决 内容精选 换一换 本文提供了分布式数据库中间件DDM产品介绍,快速入门、API接口的新特性的快速入口。 您在了解云手机的优势和应用场景后,如果想体验云手机的功能,或者需要部署真实的业务,建议您参考本节操作购买云手机。操作流程如图1所示。准备…

A survey on Few-shot Learning (小样本学习)

A survey on Few-shot Learning &#xff08;小样本学习&#xff09; 机器学习已经成功地在数据密集型任务上得以应用&#xff0c;但通常却不能够处理数据很少的情况。最近&#xff0c;小样本学习&#xff08;Few-shot Learning&#xff0c;FSL&#xff09;被提出用于解决这个问…