Files
Future/Future.Contract/Readme.cs

123 lines
4.7 KiB
C#
Raw Normal View History

2025-08-30 17:19:57 +08:00
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Xml.Serialization;
namespace Future.Contract
{
public class Readme : DependencyObject
{
#region
/// <summary>
/// 注册只读依赖属性
/// </summary>
public bool IsReadOnly
{
get { return (bool)GetValue(IsReadOnlyPropertyKey.DependencyProperty); }
protected set { SetValue(IsReadOnlyPropertyKey, value); }
}
// Using a DependencyProperty as the backing store for IsReadOnly. This enables animation, styling, binding, etc...
public static readonly DependencyPropertyKey IsReadOnlyPropertyKey =
DependencyProperty.RegisterReadOnly("IsReadOnly", typeof(bool), typeof(FutureInstruct), new PropertyMetadata(false));
#endregion
#region
/*
* WPF气泡弹框
* https://cloud.tencent.com/developer/article/2187533
* WPF自定义窗体
* https://m.jb51.net/program/2972553gk.htm
* MEF框架使用
* https://learn.microsoft.com/zh-cn/dotnet/framework/mef/
* Db4o数据库详解
* https://cloud.tencent.com/developer/article/2107051
* C#
* https://m.jb51.net/program/317527fet.htm
* WPF使用SVG格式矢量图
* https://blog.csdn.net/u012563853/article/details/131056882
* */
#endregion
//在WPF或者Silverlight中ObservableCollection是一个集合它可以用于绑定UI元素当集合中的数据发生改变时UI会自动更新。ObservableCollection实现了INotifyCollectionChanged接口这使得当集合改变时它可以通知UI进行更新。
//然而ObservableCollection本身不支持序列化。如果你需要序列化ObservableCollection你需要自己实现一些逻辑。
//以下是一种可能的方法:
//使用DataContractSerializer进行序列化。
public static string Serialize<T>(ObservableCollection<T> collection)
{
DataContractSerializer serializer = new DataContractSerializer(typeof(List<T>));
using (MemoryStream ms = new MemoryStream())
{
serializer.WriteObject(ms, collection.ToList());
ms.Position = 0;
using (StreamReader reader = new StreamReader(ms))
{
return reader.ReadToEnd();
}
}
}
public static ObservableCollection<T> Deserialize<T>(string xml)
{
DataContractSerializer serializer = new DataContractSerializer(typeof(List<T>));
using (Stream ms = new MemoryStream())
{
using (StreamWriter writer = new StreamWriter(ms))
{
writer.Write(xml);
writer.Flush();
ms.Position = 0;
List<T> list = (List<T>)serializer.ReadObject(ms);
return new ObservableCollection<T>(list);
}
}
}
//使用XmlSerializer进行序列化。
public static string XSerialize<T>(ObservableCollection<T> collection)
{
XmlSerializer serializer = new XmlSerializer(typeof(List<T>));
using (StringWriter textWriter = new StringWriter())
{
serializer.Serialize(textWriter, collection.ToList());
return textWriter.ToString();
}
}
public static ObservableCollection<T> XDeserialize<T>(string xml)
{
XmlSerializer serializer = new XmlSerializer(typeof(List<T>));
using (StringReader textReader = new StringReader(xml))
{
List<T> list = (List<T>)serializer.Deserialize(textReader);
return new ObservableCollection<T>(list);
}
}
//SplashScreen:启动屏幕
//SecurityCriticalAttribute代码安全特性
/*
ObservableCollection先转换为ListList转换回ObservableCollection
T是可序列化的T上面需要有[DataContract] [XmlType]Attribute
ObservableCollection中含有非基础类型
ObservableCollection的序列化方法*/
}
}