2012-11-28 43 views
2

我試圖保存WPF代碼,我有一個畫布與序列化。保存一個畫布的序列化爲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-producing-xaml-files-using-xamlwriter-save-method.aspx,現在我可以將其保存到一個txt文件。

+0

你能告訴我們你得到什麼例外,哪裏好嗎? – Kek

+0

它說「有反映類型'System.Windows.Controls.Canvas'的錯誤。」和「攔截的異常:SerialixeToXML」也攔截了一個異常,並且在發生異常的用戶代碼調用之前,調用堆棧解除了退出的狀態。在調試器選項中選擇了「在未處理的異常情況下展開調用堆棧」 VS中調試器的最佳讀數,這就是現場事件所說的 – Nivres

+0

好吧......似乎你不允許序列化畫布。我不確定我是否理解您期望的結果:您想要在文件中獲得完整的WPF對象圖嗎? – Kek

回答

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

這樣我可以保存在畫布上。

+0

如何回讀? – user84592

相關問題