Загрузить элемент из XAML - PullRequest
0 голосов
/ 03 февраля 2012

У меня есть пользовательский элемент управления 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.

Я пытаюсь перезагрузить его с помощью

Shape=myGrid.Findname("Shape");

, но оно тоже не работает.

Итак, где моя ошибка?

1 Ответ

1 голос
/ 04 февраля 2012

Это может быть ответом на ваш вопрос (из статьи MSDN Ограничения сериализации XamlWriter.Save ):

Основная философия того, что сериализуется вызовом Saveявляется то, что результатом будет представление сериализуемого объекта во время выполнения.Многие свойства времени разработки исходного файла XAML уже могут быть оптимизированы или потеряны к моменту загрузки XAML как объектов в памяти, и они не сохраняются при вызове Save для сериализации.Сериализованный результат является эффективным представлением построенного логического дерева приложения, но не обязательно исходного XAML, который его создал.Эти проблемы крайне затрудняют использование сериализации Save как части обширной области разработки XAML.

...