我正在编写一个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上运行良好。
感谢您的帮助。
戴夫
答案 0 :(得分:0)
正如Nate建议的那样,在Grid中添加子元素时,可以按照预期在“Loaded”事件处理程序中完成。它只在“OnNavigatedTo”处理程序中失败。更改我添加子项的代码中的位置让我得到一个非null父项。
我想指出这有点奇怪(就像一个bug)。 Grid对象存在,因此无法将其设置为子对象的父对象。此外,即使parent属性设置为null,代码也会以某种方式知道存在父对象/容器,因为如果我尝试将子项添加到多个Grid,它会抛出异常。