2011-11-08 256 views
3

此问题与此主题有关。指定的元素已经是另一个元素的逻辑子元素

Prism RegionAdapter - Removing then Adding View

我的帖子此主题已被删除我的管理员,说是回答我要开始新的线程。请让我知道你是否有任何人已经解决了这个问题。

我删除的帖子是... 您是如何设法摆脱“指定元素已经是另一个元素的逻辑子元素,请先断开它。”关闭事件错误。我尝试了同样的事情,关闭时从文档面板中删除了dockablecontent。但它不能帮助我继续收到此错误。一旦我删除了视图,然后再尝试以与添加相同的方式再次添加视图,我会收到此错误。

请帮助我,我不知道我错过了什么。我浪费了很多时间试图绕过它,但没有运气。

这里是我使用的代码:

<ad:DockableContent ... 
        x:Name="viewRoot" 
        IsCloseable="True" HideOnClose="False" 
        Title="{Binding Title}">  
     <ContentControl Grid.Row="1" Content="{Binding View}"/> 
    </Grid> 
</ad:DockableContent> 

它被使用在这里面:

<ad:DockingManager x:Name="DockingManagerControl" Grid.Column="1"> 
       <ad:ResizingPanel x:Name="MainResizingPanel" ResizeWidth="*" ResizeHeight="*" Orientation="Horizontal"> 
        <ad:DockablePane ad:ResizingPanel.ResizeWidth="0.25*" prism:RegionManager.RegionName="ProjectBrowserRegion"/> 
        <ad:ResizingPanel x:Name="PespectiveResizingPanel" ResizeWidth="0.75*" ResizeHeight="*" Orientation="Horizontal"> 
         <ad:DocumentPane x:Name="DockablePaneControl"/> 
        </ad:ResizingPanel> 
       </ad:ResizingPanel> 
      </ad:DockingManager> 

查看内容绑定它来自不同的dll文件的UI元素,所以我没有他们作为View/ViewModel对。所以我不能在这里使用ContentTemplate + DataContext的方式。事情加载得很好,但使用可以选择/取消选择这些视图。所以如果一个视图再次打开视图选择对话框,然后我清除所有视图(我从DockablePaneControl Items.Clear()中删除它),并再次添加选定的视图(DockablePaneControl Items.Add()),然后我得到这个错误。

+0

@jlafay的问题,因为你删除“谢谢你”在帖子的末尾。 Stackoverflow已锁定我的帐户以发布答案等。您是否投票拒绝或标记了我的问题?你能帮我吗?我在这里暂时不活跃,但现在我无法在这里发表任何答案。 – Rajiv

+0

对不起。我没有拒绝投票,举报,或者对你的帖子做任何其他事情。我只是简单地提供了一个编辑。 – jlafay

回答

6

通常会发生这种情况是因为您试图将相同的控件分配给两个不同的父母。

我经常看到这个问题与样式,其中包含控制非模板性质的样式设置,如ContentControl.Content,或DataGridColumn.Header

例如,如果你的风格设置ContentControl.Content,并增加了两个ContentControls添加到您的Window中,您将遇到此错误,因为该样式试图在两个ContentControls的Content部分内分配相同的控件。解决方法是设置模板样式,如ContentControl.ContentTemplate而不是ContentControl.Content。我想说这就像给多个人一样的cookie - 它不起作用。你必须给他们每个饼干(模板),而不是让他们自己做。

其实我看到这个错误,以至于我写a blog post about it

+0

嗨,雷切尔,谢谢你的快速回复。是的,我正在使用ContentControl.Content属性来设置内容。我无法用ContentTemplate + DataContext实现我的东西,因为内容来自整个FrameworkElement的单独的dll。我没有在这里使用MVVM的豪华,请告诉我如何在这里解决这个问题。有没有一种方法可以使用ContentTemplate + DataContext来完成它?请记住,我已将整个UI元素托管在ContentControl中。 – Rajiv

+0

@Rajiv我需要看你的源代码。点击问题上的“编辑”按钮,并添加导致错误的代码。我还在您发布的链接上提出了一个答案,并添加了关于它为什么正确的评论。如果您的代码与链接的帖子代码类似,那么您可以尝试使用该解决方案修复它。答案的链接是http://stackoverflow.com/questions/4993705/prism-regionadapter-removing-then-adding-view/4993910#4993910 – Rachel

+0

嗨Rachel,我已经添加了代码片段。 – Rajiv

相关问题