0

我有一个这样的自定义 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 元素,例如它没有设置背景、描边或点,即使它在 xaml 中。

我尝试重新加载它

Shape=myGrid.Findname("Shape");

但它也不起作用。

那么,我的错误在哪里?

4

1 回答 1

1

这可能是您问题的答案(来自 MSDN 文章XamlWriter.Save 的序列化限制):

通过调用 Save 进行序列化的基本原理是,结果将是在运行时被序列化的对象的表示。原始 XAML 文件的许多设计时属性在 XAML 作为内存对象加载时可能已经优化或丢失,并且在调用 Save 进行序列化时不会保留。序列化结果是应用程序构造逻辑树的有效表示,但不一定是生成它的原始 XAML。这些问题使得将 Save 序列化用作广泛的 XAML 设计图面的一部分变得极其困难。

于 2012-02-03T20:13:11.750 回答