gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:04:05 24 4
gpt4 key购买 nike

我正在研究 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 个选项卡项。一个 Tabitem 显示 xml 代码,第二个显示 c# 代码,第三个(Nasty)显示使用 c# 动态创建的 UI 元素。

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

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

什么时候出现问题? :

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

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

编辑:(请参阅解释以避免混淆)

假设我在可观察的 TabItem 集合中有两个“结果”tabitem,每个“结果”代表不同的对象,并在单击每个结果(TabItem)的 TabControl 的第三个 TabItem 时呈现不同的 UI 元素。开始时,当我单击第一个“结果”的第 3 个 TabItem(讨厌的一个,哪个 Ui 元素)时,它现在再次正常工作,我单击第二个“结果”的第 3 个选项卡项,它仍然可以正常工作并渲染 UI 元素替换第一个.现在当我第二次点击回到第一个“结果”的第三个 TabItem 时,它开始了(我的意思是首先我点击了第一个结果的第三个 tabitem 然后我点击了第二个结果的第三个 TabItem,直到它工作正常并渲染两个不同的 UI 元素在同一个地方的不同点击但是现在当我回到第一个结果的第 3 个选项卡时,它使应用程序崩溃并出现该异常)

注意:请注意我已经在c#中动态绑定(bind)了这三个TabItems。

最佳答案

这不是一个奇怪的问题,而是一个非常普遍的问题。此外,错误消息真的再清楚不过了:

The element is already the child of another element. 

WPF 中的每个 UI 元素一次只能在 UI 中的一个地方使用。我们可以四处移动它们,或者将它们从一个位置移除并将它们添加到另一个位置,但我们不能同时在两个位置添加相同的元素

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

关于c# - 该元素已经是 TabControl 中另一个元素的子元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25508303/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com