此问题与以下主题有关。 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 :(得分:6)
通常会发生这种情况,因为您尝试将同一控件分配给两个不同的父级。
我经常在样式中看到这个问题,其中包含控件的非模板属性在样式中设置,例如ContentControl.Content
或DataGridColumn.Header
例如,如果您的样式设置为ContentControl.Content
,并且您向窗口添加了两个ContentControl,则会遇到此错误,因为样式正在尝试在Content
部分中分配相同的控件。两个ContentControls。修复方法是设置模板样式,例如ContentControl.ContentTemplate
而不是ContentControl.Content
。我想说这就像给多个人一样的cookie - 它只是不起作用。你必须给他们每个饼干切割器(模板),以便他们可以自己制作。
我实际上看到有关此错误的问题,以至于我写了a blog post about it