从XAML加载元素

时间:2012-02-03 08:38:47

标签: c# wpf xaml xamlreader

我有一个像这样的自定义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");

但它也不起作用。

那么,我的错误在哪里?

1 个答案:

答案 0 :(得分:1)

这可能是您的问题的答案(来自MSDN文章Serialization Limitations of XamlWriter.Save):

  

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