2013-09-30 20 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,它将引发异常。

相关问题