仙女不吃蛋黄 2023-04-17 19:06 采纳率: 50%
浏览 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日