我有一个小问题。
这是我的代码:
stackPanelShapesContainer = new StackPanel();
InitializeStackPanle();
var gotFocusStackPanle =(StackPanel) canvas.Children[gotFocusStackPanelIndex];
foreach (UIElement child in gotFocusStackPanle.Children)
{
UIElement uiElement = child;
stackPanelShapesContainer.Children.Add(uiElement);
}
在上述代码的第 9 行中,出现以下错误 -
我该如何解决?有什么解决办法吗?
最佳答案
我希望您能从评论和其他帖子中清楚地了解错误的原因;我假设您想将一个面板中的控件副本创建到另一个面板中,如果是这种情况,则您必须首先克隆该控件,然后将其添加到新面板中。
您可以首先使用 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/