gpt4 book ai didi

c# - 我的代码中出现"Specified element is already the logical child of another element. Disconnect it first"错误,有什么解决办法吗?

转载 作者:行者123 更新时间:2023-11-30 15:38:50 26 4
gpt4 key购买 nike

我有个小问题。

这是我的代码:

stackPanelShapesContainer = new StackPanel();
InitializeStackPanle();

var gotFocusStackPanle =(StackPanel) canvas.Children[gotFocusStackPanelIndex];

foreach (UIElement child in gotFocusStackPanle.Children)
{
UIElement uiElement = child;
stackPanelShapesContainer.Children.Add(uiElement);
}

在上面代码的第 9 行中,出现以下错误 -

Specified element is already the logical child of another element. Disconnect it first.

我该如何解决?有什么解决办法吗?

最佳答案

我希望您能从评论和其他帖子中清楚错误的原因;我假设您想将一个面板中存在的控件副本创建到另一个面板中,如果是这种情况,那么您将必须首先克隆该控件,然后将其添加到新面板。

您可以通过首先使用 XamlWriter 对其进行序列化来克隆控件,然后通过使用 XamlReader 对其进行反序列化来创建新控件,类似于 this -

foreach (UIElement child in gotFocusStackPanle.Children)  
{
string childXaml = XamlWriter.Save(child);

//Load it into a new object:
StringReader stringReader = new StringReader(childXaml);
XmlReader xmlReader = XmlReader.Create(stringReader);
UIElement clonedChild = (UIElement)XamlReader.Load(xmlReader);

stackPanelShapesContainer.Children.Add(clonedChild);
}

但是,您可能会发现自己正在应用变通方法来使其正常工作,因为使用 XamlWriter.Save(例如绑定(bind))存在一些限制 - Serialization Limitations of XamlWriter.Save

这里有一些其他的序列化方法——

An XAML Serializer Preserving Bindings

XamlWriter and Bindings Serialization

关于c# - 我的代码中出现"Specified element is already the logical child of another element. Disconnect it first"错误,有什么解决办法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11028590/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com