C# 该元素已经是TabControl中另一个元素的子元素

C# 该元素已经是TabControl中另一个元素的子元素,c#,.net,wpf,silverlight,silverlight-5.0,C#,.net,Wpf,Silverlight,Silverlight 5.0,我正在处理Silverlight,遇到了一个非常奇怪的问题,在这个问题中,它不会给出任何异常,也不会在断点处运行时中断。 所以我在app.xaml.cs中保留了一个断点 private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) { //something here } 在调试时,我发现在“e”中有以下未处理的异常: {System.InvalidOp

我正在处理Silverlight,遇到了一个非常奇怪的问题,在这个问题中,它不会给出任何异常,也不会在断点处运行时中断。 所以我在app.xaml.cs中保留了一个断点

private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
{
 //something here
}
在调试时,我发现在“e”中有以下未处理的异常:

{System.InvalidOperationException: The element is already the child of another element. 
    to MS.Internal.XcpImports.CheckHResult (UInt32 hr) 
    to MS.Internal.XcpImports.SetValue (IManagedPeerBase obj, DependencyProperty property, DependencyObject doh) 
    to MS.Internal.XcpImports.SetValue (IManagedPeerBase doh, DependencyProperty property, Object obj) 
    to System.Windows.DependencyObject.SetObjectValueToCore (DependencyProperty dp, Object value) 
    to System.Windows.DependencyObject.SetEffectiveValue (DependencyProperty property, EffectiveValueEntry & newEntry, Object newValue) 
    to System.Windows.DependencyObject.UpdateEffectiveValue (DependencyProperty property, EffectiveValueEntry oldEntry, EffectiveValueEntry & newEntry, ValueOperation operation) 
    to System.Windows.DependencyObject.RefreshExpression (DependencyProperty dp) 
    System.Windows.Data.BindingExpression.SendDataToTarget to () 
    System.Windows.Data.BindingExpression.SourceAcquired to () 
    to System.Windows.Data.Binding.EnsureBreakPoint (BindingDebugState debugState, Action callback, Boolean canDelay) 
    to System.Windows.Data.BindingExpression.System.Windows.IDataContextChangedListener.OnDataContextChanged(Object sender, e DataContextChangedEventArgs) 
    to System.Windows.Data.BindingExpression.DataContextChanged (Object sender, e DataContextChangedEventArgs) 
    to System.Windows.FrameworkElement.OnDataContextChanged (DataContextChangedEventArgs e) 
    to System.Windows.FrameworkElement.OnTreeParentUpdated (DependencyObject newParent, Boolean bIsNewParentAlive) 
    to System.Windows.DependencyObject.UpdateTreeParent (IManagedPeer oldParent, IManagedPeer newParent, bIsNewParentAlive Boolean, Boolean keepReferenceToParent) 
    to MS.Internal.FrameworkCallbacks.ManagedPeerTreeUpdate (oldParentElement IntPtr, IntPtr parentElement, IntPtr childElement, bIsParentAlive Byte, Byte bKeepReferenceToParent, Boolean canCreateParent)}
现在发生时:

我有
TabControl
,它有3个选项卡项。 一个选项卡项显示xml代码,第二个选项卡项显示c代码,第三个选项卡项显示使用c动态创建的UI元素。

现在,上面的TabControl(已经包含3个TabItems)存储为另一个TabItem的内容(结果在下面的代码中),就像这样,这是所有TabItem的父级

(您可以看到,首先是“Result”,然后是“TabControl”,然后是“3个TabItems”) 该
结果
存储在
ObservableCollection result=new ObservableCollection()中我的意思是它将有两个类似于tabitem的结果。此集合中的每个“结果”负责呈现给定三个选项卡项中不同对象的信息(xml、代码和UI元素在Tabitem中呈现,对应于此ObservableCollection列表中的选定结果(Tabitem))

问题何时发生?:

只有当我从一个结果TabItem切换到另一个,然后返回到同一个“TabItem”(负责UI元素呈现,请注意,它只发生在这个TabItem上,而不是其他两个)(仅发生在我称为“讨厌”的
结果
的第三个TabItem上)一个,应该是动态创建的呈现UI元素。)它使我的项目崩溃,并给出未处理的异常

有人能告诉我这个问题的原因和解决方法吗?非常感谢。

编辑:(请参见解释中的内容以避免混淆)

假设在TabItem的可观察集合中有两个“结果”tabitems,单击每个结果(TabItem)的TabControl的第三个TabItem,每个“结果”代表不同的对象并呈现不同的UI元素。开始时,当我单击第一个“结果”的第三个选项卡项(讨厌的一个,哪个Ui元素)时,它工作正常。现在,我再次单击第二个“结果”的第三个选项卡项,它仍然工作正常,并呈现Ui元素替换第一个。现在,当我第二次单击第一个“结果”的第三个选项卡项时,它会滚动(我的意思是,首先我单击了第一个结果的第三个选项卡项,然后单击了第二个结果的第三个选项卡项,直到它工作正常,并在同一位置的不同单击上呈现两个不同的UI元素,但是nowx当我返回到第一个结果的第三个选项卡项时,它会导致应用程序崩溃,出现该异常情况


注意:请注意,我已经在c#中动态绑定了这三个选项卡项。

这不是一个奇怪的问题,这是一个非常常见的问题。此外,错误消息非常清楚:

The element is already the child of another element. 
WPF中的每个UI元素一次只能在UI中的一个位置使用。我们可以移动它们,或者从一个位置删除它们并将它们添加到另一个位置,但不能同时在两个位置添加相同的元素


因此(无需查看所有代码),我只能假设您试图在动态创建的
TabControl
中使用已经存在于UI中的对象。一旦找到有问题的元素,可以在复制所用元素的值之后,将其与新元素交换。这样做之后,您应该会更幸运地显示第三个
TabItem

@Sherdin谢谢,但我想你仍然无法理解这个问题。请参阅编辑部分,我已经正确地解释了我的问题。不,我完全理解这个错误,并且我已经解释了为什么你会得到它。引发
异常的原因只有一个,我的答案解释了原因。你应该是一个我这样说是因为第二次单击3 rdtabitem(渲染UI元素)时它不起作用,但当我看到其他两个选项卡“xml渲染”和“代码渲染”时,它们仍然渲染,但在第一次结果的“第三个TabItem”的第二次渲染中再次渲染(第二个结果的第三个TabItem重新定义后不起作用)。我指的是每个结果都呈现不同对象的信息(不相同)。我指的是两个“结果”(TabItem)在同一位置呈现不同对象的信息。单击后,这些对象工作正常。U在同一位置呈现UI,替换上一个。但在重新呈现“第一个”结果的UI元素时“在第二个问题出现后。您可以随意忽略这些事实,但如果您遇到此错误,那么在代码中的某个地方,您尝试向UI中添加已存在于UI中的元素。事实!