我有一个小问题。

这是我的代码:

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/

10-16 19:02