2011-11-08 166 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

相關問題