c# - C# 如何使用 XML 加载 Canvas
问题描述
我的问题是我不知道如何从 XML 文件中加载 Canvas 类型的对象。我希望你能帮助我。
这就是我正在尝试的,我也会向您展示我如何进行序列化的代码,以防万一我做错了什么。
private void SaveButton_Click(object sender, RoutedEventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.FileName = "untitled";
sfd.Filter = "XML Files(*.xml) | *.xml | Text Files(*.txt) | *.txt | All Files(*.*) | *.* ";
sfd.ShowDialog();
MainWindow mainWindow = new MainWindow();
SerializeToXML(mainWindow, designSpace, 96, sfd.FileName);
mainWindow.Close();
}
public static void SerializeToXML(MainWindow window, Canvas canvas, int dpi, string filename)
{
string mystrXAML = XamlWriter.Save(canvas);
FileStream filestream = File.Create(filename);
StreamWriter streamwriter = new StreamWriter(filestream);
streamwriter.Write(mystrXAML);
streamwriter.Close();
filestream.Close();
}
private void LoadButton_Click(object sender, RoutedEventArgs e)
{
var fileContent = string.Empty;
OpenFileDialog ofd = new OpenFileDialog();
ofd.InitialDirectory = "c:\\";
ofd.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
ofd.FilterIndex = 2;
ofd.RestoreDirectory = true;
ofd.ShowDialog();
var fileStream = ofd.OpenFile();
string boi = ofd.FileName;
// Create an instance of the XmlSerializer specifying type.
XmlSerializer serializer =
new XmlSerializer(typeof(Canvas));
// Create a TextReader to read the file.
FileStream fs = new FileStream(boi, FileMode.Open);
TextReader reader = new StreamReader(fs);
// Use the Deserialize method to restore the object's state.
designSpace = (Canvas)serializer.Deserialize(reader);
}
在我尝试加载 XML 文件之前,该应用程序运行良好,这时会弹出此异常:
System.InvalidOperationException: 'Error to reflect type System.Windows.Controls.Canvas'.' NotSupportedException: Can not serialize the member System.Windows.Input.InputBinding.Command type System.Windows.Input.ICommand because it's an interface.
解决方案
我做了
在储蓄:
string xml = XamlWriter.Save(cssave);
using (StreamWriter fl = new StreamWriter(path, false))
{
fl.Write(xml);
}
在加载中:
string xml = File.ReadAllText(currpath);
//Convert string to stream
byte[] byteArray = Encoding.UTF8.GetBytes(xml);
MemoryStream stream = new MemoryStream(byteArray);
Canvas cs = (Canvas)XamlReader.Load(stream);
csmain.Children.Add(cs);
推荐阅读
- sms - 我们可以在 Mitel Your Site Explorer 上对传入的 SMS 消息进行基于文本的调节吗?
- c++ - 如何接收带有空格的输入,然后将其存储到向量中?
- python - NetworkX 中的最短路径生成器
- r - jsonlite 错误:词法错误:json 文本中的无效字符
- java - 在 bash shell 上使用 Maven 来自动化我的部署工作流程 (github-package-registry)
- geocoding - 当交叉路口包括州际高速公路时地理编码失败
- python - django.db.utils.OperationalError: no such table: Recruiter_jobs table not found 错误?
- node.js - NPM 找不到它认为缓存的文件(errno -4058 没有这样的文件或目录)
- smartcontracts - 意外的基板“ink_env::debug_println”行为
- reactjs - 如何设置材质顶部标签导航的样式?