我的wpf中有些动画,在一定的点有些暂停啊啥的操作,一开始我想的是把暂停的位置和暂停的时间放进数据库,但是要是再拿出来恢复成动画的话有点难,有没有什么简单的办法能把这个过程放入数据库
6条回答 默认 最新
- 社区专家-Monster-XH 2023-04-17 19:19关注
基于Monster 组和GPT的调写:
- 一种简单的方法是把动画的关键帧和其他参数序列化为一个格式,然后保存到数据库中。这样,可以在需要时将动画过程从数据库中读取,反序列化为动画对象,然后播放它。
在C#中,用DataContractSerializer或Json.NET来序列化和反序列化动画对象。以下是一个简单的示例代码,用DataContractSerializer将Storyboard对象序列化为字符串,然后将其保存到数据库中:
using System.IO; using System.Runtime.Serialization; using System.Xml; // 将动画序列化为字符串 var serializer = new DataContractSerializer(typeof(Storyboard)); var settings = new XmlWriterSettings { Indent = true }; var stringWriter = new StringWriter(); using (var writer = XmlWriter.Create(stringWriter, settings)) { serializer.WriteObject(writer, myStoryboard); } string serializedAnimation = stringWriter.ToString(); // 将字符串保存到数据库中 using (var conn = new SqlConnection("connection_string")) using (var cmd = new SqlCommand("INSERT INTO MyTable (AnimationData) VALUES (@AnimationData)", conn)) { cmd.Parameters.AddWithValue("@AnimationData", serializedAnimation); conn.Open(); cmd.ExecuteNonQuery(); }
- 然后可以从数据库中读取保存的字符串,反序列化为动画对象,并播放它。以下是一个简单的示例代码,用DataContractSerializer从字符串中反序列化Storyboard对象:
using System.IO; using System.Runtime.Serialization; using System.Xml; // 从数据库中读取动画字符串 string serializedAnimation; using (var conn = new SqlConnection("connection_string")) using (var cmd = new SqlCommand("SELECT AnimationData FROM MyTable WHERE Id = @Id", conn)) { cmd.Parameters.AddWithValue("@Id", myId); conn.Open(); serializedAnimation = (string)cmd.ExecuteScalar(); } // 反序列化为动画对象 var serializer = new DataContractSerializer(typeof(Storyboard)); using (var reader = XmlReader.Create(new StringReader(serializedAnimation))) { var deserializedAnimation = (Storyboard)serializer.ReadObject(reader); } // 播放动画 deserializedAnimation.Begin(myTargetElement);
一个简单的示例,根据需要修改。此外还要考虑如何处理序列化和反序列化中的错误,并对动画序列化格式进行设计。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 echarts动画效果失效的问题。官网下载的例子。
- ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
- ¥15 Attention is all you need 的代码运行
- ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
- ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
- ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
- ¥30 关于<main>标签页面跳转的问题
- ¥80 部署运行web自动化项目
- ¥15 腾讯云如何建立同一个项目中物模型之间的联系
- ¥30 VMware 云桌面水印如何添加