【发布时间】:2020-04-03 21:33:08
【问题描述】:
我看到这篇帖子XamlWriter deepcopy 将一个网格的内容复制到另一个网格。它要求使用 XamlWriter 并将字符串传递给 XamlReader。但是 XamlWriter 类在 uwp 中不可用。所以我看到这篇文章Serializing in uwp 要求改用 XmlSerializer。当我尝试以下操作时,我得到一个异常,说不能序列化非公共成员。请帮忙。简单来说,如何在 UWP 中将一个 Grid 的内容克隆到另一个 Grid。
xaml: I want to clone elements in this Grid into a new Grid from code behind.
<Grid x:Name="gridBarImagePanel"
RenderTransformOrigin="0.5,0.5"
Width="800" VerticalAlignment="Stretch">
<Image x:Name="BarCodeImage" Stretch="None"></Image>
<Canvas Background="Pink" x:Name="cnvBarCodeImage" Opacity="0.5" AllowDrop="True">
</Canvas>
</Grid>
我尝试了以下方法,但出现异常
var tempGrid = new Grid();
XmlSerializer serializer = new XmlSerializer(typeof(Grid));
StringWriter stringWriter = new StringWriter();
serializer.Serialize(stringWriter, gridBarImagePanel.Children); //Gives an exception saying it does not have a parameterless constructor.
所以我尝试了以下方法来进行深层复制。但它抱怨说 gridBarImagePanel.Children 没有标记为可序列化。当我尝试创建一个继承 UIElementCollection 的自定义类时,该类是密封的。
string content;
using (var stream = new MemoryStream())
{
BinaryFormatter f = new BinaryFormatter();
f.Serialize(stream, gridBarImagePanel.Children);
stream.Position = 0;
content = new StreamReader(stream).ReadToEnd();
}
【问题讨论】: