仙女不吃蛋黄 2023-04-17 19:06 采纳率: 61.9%
浏览 37
已结题

wpf中的动画过程存入数据库

我的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);
    
    

    一个简单的示例,根据需要修改。此外还要考虑如何处理序列化和反序列化中的错误,并对动画序列化格式进行设计。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 5月1日
  • 已采纳回答 4月23日
  • 创建了问题 4月17日

悬赏问题

  • ¥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 云桌面水印如何添加