我有一个像这样的自定义XAML用户控件:
<UserControl x:Class="CheckPoint.Modules.Beach.Beach_Shape"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<Polygon Name="Shape"></Polygon>
</Grid>
</UserControl>
我希望xaml使用XamlWrite.Save对其进行序列化,然后使用XamlReader.Load重新加载它。
XmlReader reader = XmlReader.Create(new StringReader(xml));
UserControl uc=(UserControl)XamlReader.Load(reader);
myGrid.Children.Add(uc);
“uc”在myGrid上正确显示,但“uc”对象不正确,因为Shape元素未正确加载,例如它没有设置Background,Stroke或Points,即使它是在xaml中。< / p>
我尝试用
重新加载它Shape=myGrid.Findname("Shape");
但它也不起作用。
那么,我的错误在哪里?
答案 0 :(得分:1)
这可能是您的问题的答案(来自MSDN文章Serialization Limitations of XamlWriter.Save):
通过调用Save来序列化的基本理念是 结果将是序列化对象的表示,at 运行。原始XAML文件的许多设计时属性可能 在XAML加载时已经优化或丢失 内存中的对象,并且在调用“保存到”时不会保留 连载。序列化结果是一个有效的表示 构造应用程序的逻辑树,但不一定是 产生它的原始XAML。这些问题极其重要 难以使用保存序列化作为广泛的XAML的一部分 设计表面。