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

本文关键字:应用 FrameworkElement 获取 Windows | 更新日期: 2023-09-27 18:33:31

我正在编写一个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;

内容面板是页面上的网格。字段视图是一个用户控件。页面显示得很好,任何代码中都没有例外。唯一不对的是我无法获得 FieldView 的父级。它是空的。

在发布此内容之前,我做了一个快速测试,以确保用户控制不是问题所在。 使用文本块会显示相同的问题:

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 上工作正常。

感谢您的任何帮助。

戴夫

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

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

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