积极答复者
如何解决"指定的元素已经是另一个元素的逻辑子元素 请先将其断开连接"

问题
-
/*DependencyObject parent = TabUserEdit_DGList.Parent; if (parent != null) { parent.SetValue(ContentControl.ContentProperty, null); parent = null; }*/ try { TabUserEdit_DGList.Parent.SetValue(ContentControl.ContentProperty, null); } catch { } grid.Children.Add(TabUserEdit_DGList); 第一次通过grid.Children.Add(TabUserEdit_DGList)没有问题,第二次就会出现"指定的元素已经是另一个元素的逻辑子元素 请先将其断开连接". 网上搜索说要把父级元素清空,可用了还是报错.
- 已编辑 RShuiC 2012年1月6日 3:31
答案
-
那是当然的,同一个元素,只能被添加一次,除非你再New一个出来
或者,在添加前判断一下
比如 if(!grid.Children.Contains(TabUserEdit_DGList))如果grid中不包含TabUserEdit_DGList,那么才执行grid.Children.Add(TabUserEdit_DGList);
Hero- 已建议为答案 Jie BaoModerator 2012年1月10日 3:25
- 已标记为答案 Jie BaoModerator 2012年1月13日 10:20
-
要知道,XML文档是树形结构,一个对象有且仅有一个父节点,也就是说,XML中任何一个元素只能被包含在一个父元素下面。 XAML也是XML形式的,WPF的对象关系遵循XML的这种规范,所以他可以用XAML形式表达,也就是说WPF的控件元素有且仅有一个父对象。 这样解释你应该可以理解了吧。
所以,同一个元素我们只能加入到Grid中一次,第二次就会报出这个错误。解决方法就是我们要么把这个元素先从Grid中拿出来,要么就在加入一个全新的元素。 如HeroHua所说。
Sincerely,
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
- 已标记为答案 Jie BaoModerator 2012年1月13日 10:20
全部回复
-
那是当然的,同一个元素,只能被添加一次,除非你再New一个出来
或者,在添加前判断一下
比如 if(!grid.Children.Contains(TabUserEdit_DGList))如果grid中不包含TabUserEdit_DGList,那么才执行grid.Children.Add(TabUserEdit_DGList);
Hero- 已建议为答案 Jie BaoModerator 2012年1月10日 3:25
- 已标记为答案 Jie BaoModerator 2012年1月13日 10:20
-
要知道,XML文档是树形结构,一个对象有且仅有一个父节点,也就是说,XML中任何一个元素只能被包含在一个父元素下面。 XAML也是XML形式的,WPF的对象关系遵循XML的这种规范,所以他可以用XAML形式表达,也就是说WPF的控件元素有且仅有一个父对象。 这样解释你应该可以理解了吧。
所以,同一个元素我们只能加入到Grid中一次,第二次就会报出这个错误。解决方法就是我们要么把这个元素先从Grid中拿出来,要么就在加入一个全新的元素。 如HeroHua所说。
Sincerely,
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
- 已标记为答案 Jie BaoModerator 2012年1月13日 10:20