0

我試圖保存XAML UIElement(Grid,Button,TextBlock..etc。)的屬性並通過保存整個控件來重新恢復它。 所以我的第一個選擇是JSONize -serialize-控件並保存爲字符串,然後通過JsonConvert方法Newtonsoft.Json恢復它:WinRT:有沒有辦法(Json,XML)在C#中序列化XAML UIElement?

這裏是我的代碼:

Grid grid = new Grid { Background = new SolidColorBrush(Colors.Red), Margin = new Thickness(0, 5, 0, 0) }; 
string jsonStringGrid = JsonConvert.SerializeObject(grid); 

但是,一個奇怪的例外,說:

類型的未處理的異常「 System.StackOverflowException' 發生在mscorlib.ni.dll

然後我試着與我想要的屬性的類,所以沒有必要序列化整個網格,只是我的新類:

public class MyGridClass 
     { 
      public Brush Background { get; set; } 
      public Thickness Margin { get; set; } 
     } 

沒有複雜類型和屬性..但同樣的異常再次發生。

然後,我試圖將Brush類型更改爲string與「紅色」來測試它,我試圖序列化它,它的工作!

刷子類型有什麼問題? 有沒有辦法保存XAML控件並將其恢復爲無手動序列化?

我不知道到底是我不能分析或序列,但如果有這些屬性的列表,那將是對我好屬性..

+0

一個猜測是'Brush'的Dispatcher屬性導致了/ a問題。它絕對不打算被序列化。 – WiredPrairie

+0

將答案標記爲答案可能有意義。 –

回答

2

答案是什麼痛苦地簡單。 XAML Brush不可序列化。

+0

謝謝傑裏,你知道有什麼辦法去做我想要的嗎?不管序列化如何。 –

+1

好吧,假設畫筆是100%不透明度的SolidColorBrush,您可以從中提取顏色,並僅使用它進行序列化。這就是說,刷子也可以是一個LinearBrush或WebBrush,具有不同的不透明度,這使得提取和補水非常複雜。 –

1

Windows.UI.Color是可序列化的。只要保留它作爲財產。然後使用

var newBrush = new SolidColorBrush(newColor); 

希望這有助於!

+0

謝謝你的回答,是的UI.Color,但沒有刷,這是我的情況:) –

相關問題