因此,對於我的應用程序,我只是有一個圖像加載,然後在一個選項卡項目中的網格。點擊一個按鈕後,我創建了一個新的標籤項和相關的代碼來加載其他東西。但是,回到第一個選項卡時,遇到此錯誤:WPF樹錯誤導航回到以前的選項卡
「在連接到新的父級Visual之前,必須斷開與當前父級Visual的指定子級」。
具體位置:
public class VisualsHost : FrameworkElement
{
DrawingVisual _square;
public VisualsHost()
{
_square = new DrawingVisual();
this.Loaded += new RoutedEventHandler(OnLoaded);
}
public void OnLoaded(object sender, RoutedEventArgs e)
{
AddVisualChild(_square);
AddLogicalChild(_square);
}
這只是我爲我用我的主標籤內容我選擇方形容器。
所以我想知道,究竟發生了什麼,我將如何去解決這個問題?
在我的第一個選項卡的內容的簡要結構爲:
的tabcontrol> DockPanel中 - >列表框 - >格(itemspanelcontainer風格) - > listboxitems ...
但是,主要問題是,當我進入新選項卡時會發生什麼?一棵新的樹是被創造出來的東西,而舊的樹被消滅了?顯然,舊的不是。對我來說,WPF更有意義的是讓內存知道每個交換機上以前的視覺/邏輯樹的結構和狀態。 – Ilya 2010-10-19 17:24:19
沒有新的創建 - 一個較小的事實:Loaded事件不僅在第一次加載時調用一次 - 例如,如果您正在使用系統主題並更改了系統主題,則可能再次加載該元素。在你的情況下,視覺樹會以某種方式再次失效 - 也許是因爲你對圖像的綁定再次被讀取(如果這是原因,也可以將綁定改爲OneTime)。更多的信息在這裏:http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.loaded.aspx – markmnl 2010-10-20 04:05:57
一旦學習這個我自己,我不得不添加檢查,我的Loaded事件處理程序只運行一遍我的碼.. – markmnl 2010-10-20 04:07:12