【问题标题】:WinRT: In there any way to (Json,XML) serialize a XAML UIElement in C#?WinRT:有什么方法可以(Json,XML)在 C# 中序列化 XAML UIElement?
【发布时间】:2016-03-08 07:46:31
【问题描述】:

我正在尝试通过保存整个控件来保存 XAML UIElement(网格、按钮、TextBlock..等)的属性并再次恢复它。 所以我的第一个选择是 JSONize -serialize- 控件并将其保存为字符串,然后通过 Newtonsoft.Json 中的 JsonConvert 方法恢复它:

这是我的代码:

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 并仅使用“Red”进行测试,然后我尝试对其进行序列化并且它正在工作!!

画笔类型有什么问题? 无论如何要保存 XAML 控件并在没有手动序列化的情况下恢复它?

我不知道我无法解析或序列化的确切属性是什么,但如果有这些属性的列表,那对我有好处..

【问题讨论】:

  • 一种猜测是BrushDispatcher 属性导致了/a 问题。它绝对不打算被序列化。
  • 将答案之一标记为答案可能有意义。

标签: windows-runtime windows-store-apps winrt-xaml win-universal-app


【解决方案1】:

答案非常简单。 XAML Brush 不可序列化。

【讨论】:

  • 谢谢杰瑞,你知道有什么方法可以做我想做的事吗?不管序列化..
  • 好吧,假设画笔是具有 100% 不透明度的 SolidColorBrush,您可以从中提取颜色,并仅使用它进行序列化。话虽如此,Brush 也可以是具有不同不透明度的 LinearBrush 或 WebBrush,这使得提取和补水变得非常复杂。
【解决方案2】:

Windows.UI.Color 是可序列化的。只需将其保留为财产。然后使用

var newBrush = new SolidColorBrush(newColor);

希望这会有所帮助!

【讨论】:

  • 感谢您的回答,UI.Color 是,但 Brush 不是,这是我的情况 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-25
  • 2019-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多