2013-09-30 19 views
1

我正在編寫C#XAML Windows應用商店應用。我的網頁上有一個網格。我向該網格添加一個子元素,然後立即嘗試獲取此子元素的父元素。父項爲空。似乎沒有辦法從子元素獲取父網格。這裏有一些代碼來展示我在做什麼。這不是那麼複雜:如何在Windows應用商店應用中獲得FrameworkElement的父代

這是添加子元素,並嘗試獲取父元素的代碼:

FrameworkElement FieldView = Field.getView(true); 
ContentPanel.Children.Add(FieldView); 
Panel theParent = VisualTreeHelper.GetParent(FieldView) as Panel; 
FrameworkElement theotherparent = (FrameworkElement)FieldView.Parent; 

的ContentPanel是頁面上的網格。 FieldView是一個UserControl。該頁面顯示得很好,並且在任何代碼中都沒有例外。唯一的錯誤是我無法獲得FieldView的父項。它是空的。

發佈之前,我做了一個快速測試,以確保UserControl不是問題。使用TextBlock顯示相同的問題:

TextBlock Derf = new TextBlock(); 
PageGroup.ContentPanel.Children.Add(Derf); 
Panel theParent2 = VisualTreeHelper.GetParent(Derf) as Panel; 
FrameworkElement theotherparent2 = (FrameworkElement)Derf.Parent; 

父屬性從未在Windows應用商店應用中設置?此代碼在Window Phone 8上運行良好。

感謝您的任何幫助。

戴夫

+0

在嘗試獲取「父」之前,請確保「Panel」已被加載。你可以通過將你的邏輯添加到'Loaded'事件來做到這一點。 –

+0

謝謝。我發現這個問題是因爲我寫的代碼在我離開頁面時(在OnNavigatingFrom事件中)嘗試從父項中移除子項。該頁面在失敗之前可見且正在工作。我會嘗試你的建議,以確認它從來沒有工作。 –

+0

另一個需要檢查的問題是'GetParent'調用在投射到'Panel'之前是'null'。 –

回答

0

至於內特建議,增加子元素到電網工程時,它是在「裝」事件處理程序中完成的預期。它只在「OnNavigatedTo」處理程序中失敗。在添加子項的代碼中更改位置可讓我獲得非空父項。

我想指出這有點奇怪(就像一個bug)。 Grid對象存在,所以它不能被設置爲子對象的父對象。此外,即使將父屬性設置爲null,代碼也會知道存在父對象/容器,因爲如果我嘗試將子對象添加到多個Grid,它將引發異常。

相關問題