指定的元素已经是另一个元素的逻辑子元素。 首先断开它
这是我想要将FrameworkElement附加到新窗口以将其发布到PNG文件时的错误。
所以我的想法是删除父子链接,调用我的方法,并使用以下代码再次添加子代:
this.RemoveLogicalChild(element); PublishFrameworkElement(element, stream); this.AddLogicalChild(element);
但我得到了完全相同的错误……
我在这里看了很多关于这个错误的问题,但没有回答我的问题我错过了什么?
编辑:这是适合我的代码:
var element = _GeneratedContent as FrameworkElement; var ParentPanelCollection = (element.Parent as Panel).Children as UIElementCollection; ParentPanelCollection.Clear(); FileStream stream = [...] if (element != null) { PublishFrameworkElement(element, stream); ParentPanelCollection.Add(element); } stream.Close();
如果element
是Panel的子级(例如Grid),则必须将其从Panel的Children集合中删除。 如果将其设置为ContentControl
Content
,则必须将该Content设置为null(或其他任何不是element
)。
纪尧姆
您可以尝试在RemoveLogicalChild之后另外使用RemoveVisualChild方法:
this.RemoveLogicalChild(element); this.RemoveVisualChild(element); PublishFrameworkElement(element, stream);
希望这有帮助,彼得。
我有类似但略有不同的问题,但得到了相同的错误消息。 我做了一个变通方法,创建一个inheritance的类并调用RemoveLogicalChild(因为这是一个受保护的方法)。
public partial class PopupWindow : Window { public PopupWindow() { InitializeComponent(); } protected override void OnClosed(EventArgs e) { base.OnClosed(e); this.RemoveLogicalChild(this.Content); // since protected method } }
它对我有用。 我做了一个简单的例子,你可以在这里看到。
http://wpfgrid.blogspot.com/2013/01/wpf-error-specified-element-is-already.html
老问题,但我没有运气与其他答案,所以我做了一个扩展方法从其父项中删除该项目。
public static class FrameworkElementHelper { public static void RemoveFromParent(this FrameworkElement item) { if (item != null) { var parentItemsControl = (ItemsControl)item.Parent; if (parentItemsControl != null) { parentItemsControl.Items.Remove(item as UIElement); } } } }