将文件保存为XML格式即可。这里使用XElement对象来保存XML文件。
参考MSDN
1、创建根目录
XElement root = new XElement("Root");
2、添加子节点
XElement designerItemsXML = SerializeDesignerItems(designerItems);
XElement connectionsXML = SerializeConnections(connections);
XElement root = new XElement("Root");
root.Add(designerItemsXML);
root.Add(connectionsXML);
3、保存
SaveFileDialog saveFile = new SaveFileDialog();
saveFile.Filter = "Files (*.xml)|*.xml|All Files (*.*)|*.*";
if (saveFile.ShowDialog() == true)
{
root.Save(saveFile.FileName);
}
其中,最重要的是如何将自定义控件designerItems,connections转化为XElement对象,
对于designerItems,它是一个ContentControl控件,它的Content中存放着其他控件,所以对这个Content属性
要单独的做处理
let contentXaml = XamlWriter.Save(((DesignerItem)item).Content);
部分代码如下
private XElement SerializeDesignerItems(IEnumerable<DesignerItem> designerItems)
{
XElement serializedItems = new XElement("DesignerItems",
from item in designerItems
let contentXaml = XamlWriter.Save(((DesignerItem)item).Content)
select new XElement("DesignerItem",
new XElement("Left", Canvas.GetLeft(item)),
new XElement("Top", Canvas.GetTop(item)),
new XElement("Width", item.Width),
new XElement("Height", item.Height),
new XElement("ID", item.ID),
new XElement("zIndex", Canvas.GetZIndex(item)),
new XElement("IsGroup", item.IsGroup),
new XElement("ParentID", item.ParentID),
new XElement("Content", contentXaml)
)
);
return serializedItems;
}