1

我正在编写一个 C# XAML Windows Store 应用程序。我的页面上有一个网格。我在该网格中添加了一个子元素,并立即尝试获取该子元素的父元素。父级为空。似乎没有办法从子元素获取父网格。这是一些代码来显示我在做什么。这并不是那么复杂:

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

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

ContentPanel 是页面上的一个网格。FieldView 是一个用户控件。页面显示得很好,任何代码都没有异常。唯一错误的是我无法获取 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 上运行良好。

谢谢你的帮助。

戴夫

4

1 回答 1

0

正如 Nate 所建议的,当在“Loaded”事件处理程序中完成时,将子元素添加到 Grid 会按预期工作。它仅在“OnNavigatedTo”处理程序中失败。更改代码中添加子项的位置可以让我获得一个非空父项。

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

于 2013-09-30T22:23:03.993 回答