none
如何解决"指定的元素已经是另一个元素的逻辑子元素 请先将其断开连接" RRS feed

  • 问题

  • /*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
    2012年1月6日 3:30

答案

  • 那是当然的,同一个元素,只能被添加一次,除非你再New一个出来

    或者,在添加前判断一下

    比如 if(!grid.Children.Contains(TabUserEdit_DGList))如果grid中不包含TabUserEdit_DGList,那么才执行grid.Children.Add(TabUserEdit_DGList);


    Hero
    2012年1月10日 1:44
  • 要知道,XML文档是树形结构,一个对象有且仅有一个父节点,也就是说,XML中任何一个元素只能被包含在一个父元素下面。 XAML也是XML形式的,WPF的对象关系遵循XML的这种规范,所以他可以用XAML形式表达,也就是说WPF的控件元素有且仅有一个父对象。 这样解释你应该可以理解了吧。

    所以,同一个元素我们只能加入到Grid中一次,第二次就会报出这个错误。解决方法就是我们要么把这个元素先从Grid中拿出来,要么就在加入一个全新的元素。 如HeroHua所说。

    Sincerely,


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    2012年1月10日 3:25
    版主

全部回复

  • 那是当然的,同一个元素,只能被添加一次,除非你再New一个出来

    或者,在添加前判断一下

    比如 if(!grid.Children.Contains(TabUserEdit_DGList))如果grid中不包含TabUserEdit_DGList,那么才执行grid.Children.Add(TabUserEdit_DGList);


    Hero
    2012年1月10日 1:44
  • 要知道,XML文档是树形结构,一个对象有且仅有一个父节点,也就是说,XML中任何一个元素只能被包含在一个父元素下面。 XAML也是XML形式的,WPF的对象关系遵循XML的这种规范,所以他可以用XAML形式表达,也就是说WPF的控件元素有且仅有一个父对象。 这样解释你应该可以理解了吧。

    所以,同一个元素我们只能加入到Grid中一次,第二次就会报出这个错误。解决方法就是我们要么把这个元素先从Grid中拿出来,要么就在加入一个全新的元素。 如HeroHua所说。

    Sincerely,


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    2012年1月10日 3:25
    版主