指定的元素已经是另一个元素的逻辑子元素

时间:2011-11-08 14:30:07

标签: wpf prism

此问题与以下主题有关。 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()),然后我得到这个错误。

1 个答案:

答案 0 :(得分:6)

通常会发生这种情况,因为您尝试将同一控件分配给两个不同的父级。

我经常在样式中看到这个问题,其中包含控件的非模板属性在样式中设置,例如ContentControl.ContentDataGridColumn.Header

例如,如果您的样式设置为ContentControl.Content,并且您向窗口添加了两个ContentControl,则会遇到此错误,因为样式正在尝试在Content部分中分配相同的控件。两个ContentControls。修复方法是设置模板样式,例如ContentControl.ContentTemplate而不是ContentControl.Content。我想说这就像给多个人一样的cookie - 它只是不起作用。你必须给他们每个饼干切割器(模板),以便他们可以自己制作。

我实际上看到有关此错误的问题,以至于我写了a blog post about it