如何在Windows应用商店应用中获取FrameworkElement的父级

时间:2013-09-30 18:42:34

标签: c# xaml windows-store-apps

我正在编写一个C#XAML Windows应用商店应用。我的页面上有一个网格。我向该网格添加了一个子元素,我立即尝试获取该子元素的父元素。父级为空。似乎没有办法从子元素中获取父网格。这里有一些代码来展示我正在做的事情。这并不复杂:

这是添加子元素并尝试获取父元素的代码:

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上运行良好。

感谢您的帮助。

戴夫

1 个答案:

答案 0 :(得分:0)

正如Nate建议的那样,在Grid中添加子元素时,可以按照预期在“Loaded”事件处理程序中完成。它只在“OnNavigatedTo”处理程序中失败。更改我添加子项的代码中的位置让我得到一个非null父项。

我想指出这有点奇怪(就像一个bug)。 Grid对象存在,因此无法将其设置为子对象的父对象。此外,即使parent属性设置为null,代码也会以某种方式知道存在父对象/容器,因为如果我尝试将子项添加到多个Grid,它会抛出异常。