将UIElement添加到Panel会导致InvalidOperationException“已经是另一个元素的逻辑子”

时间:2012-07-06 14:17:20

标签: c# wpf c#-4.0 wpf-controls uielement

好的,大多数人会说“在将元素添加到新面板之前将其从之前的父元素中删除”。我知道,我已经在其他情况下多次应用了这些,我无法解释为什么它在这种特殊情况下不起作用。

以下是我的调试会话的摘录以及发生异常的地方:

enter image description here

如您所见,我的元素的父母没有孩子! 你有什么建议吗?我该如何诊断这个问题?谢谢!

编辑:我确切地说,该元素先前已添加到用于生成XPS的面板中,并在生成完成后删除。 ==>这是在我们输入“AddNewSpecialElement方法”之前完成的,但它不应该改变上面的问题。

1 个答案:

答案 0 :(得分:0)

问题解决了。解释。

当我按照这些步骤出现问题时:

  1. 在屏幕上绘制视觉效果列表(所有视觉效果都放在一个stackPanel中)==>确定
  2. 从stackPanel中删除视觉效果,以便在我自己的DocumentPaginator中使用它们==>确定
  3. 打印或导出它们(例如,使用PrintQueue.CreateXpsDocumentWriter().Write(paginator))。 ==>确定
  4. 完成导出并处理Paginator后,将视觉效果添加到原始stackPanel以再次在屏幕上显示它们==>确定
  5. 开始新的XPS导出,重复步骤2 ==>例外!
  6. 我认为处理Paginator就足够了。我没有理由认为不是,因为第4步运作良好。 事实上,我必须在步骤3b中明确地从Paginator中的父视觉中删除视觉效果。

    感谢阅读。