2

我正在尝试通过序列化保存我在 Canvas 中的 WPF 代码。

我想要做的是我可以在我的 C# 程序中添加元素,然后当我按下保存时,我想将我的画布的内容保存到一个文件中。

我正在使用 SaveFileDialog 首先打开一个对话框,我可以保存文件。

但是当我试图保存它时,我遇到了问题。

        Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
        dlg.FileName = "Name_" + random_save_name; 
        dlg.DefaultExt = ".text";
        dlg.Filter = "Text documents (.txt)|*.txt";
        Nullable<bool> result = dlg.ShowDialog();

        if (result == true)
        {
            SerializeToXML(this.parentWindow, this.parentWindow.canvas, 96, dlg.FileName);
        }

canvas 是我的画布的名称,SerializeToXML 像这样锁定。

    public static void SerializeToXML(MainWindow window, Canvas canvas, int dpi, string filename)
    {
        XmlSerializer serializer = new XmlSerializer(typeof(Canvas));
        TextWriter textWriter = new StreamWriter(filename);
        serializer.Serialize(textWriter, canvas);
        textWriter.Close();
     }

我可以运行该程序,但我得到一个异常。我可能做错了,但我很难找到解决方案。

Eddt:“反映类型‘System.Windows.Controls.Canvas’时出现错误。” 和“异常拦截:SerialixeToXML,也拦截了一个异常,调用堆栈展开到从发生异常的用户代码调用之前的点。在调试器选项中选择了“展开未处理异常的调用堆栈”“我不是VS 中调试器的最佳读数,这就是现场活动所说的

编辑2:确实找到了这个:http: //blogs.msdn.com/b/ashish/archive/2008/01/15/dynamically-produce-xaml-files-using-xamlwriter-save-method.aspx现在我可以保存到一个txt文件。

4

1 回答 1

3

我所做的是:

    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();
    }

这样我可以保存画布。

于 2012-11-28T15:43:30.487 回答