Windows 8 画布没有父级(如果不是可视树的一部分)?

Windows 8 画布没有父级(如果不是可视树的一部分)?,windows-8,microsoft-metro,c++-cx,Windows 8,Microsoft Metro,C++ Cx,我正在为Windows8Metro编写一个应用程序,在理解Canvas的父子关系时遇到了一个问题。似乎当我将一个画布添加到另一个画布的子画布时,subcanvas'->parent属性等于null,直到父画布添加到可视化树。下面是一些显示问题的示例代码 Xaml::Controls::Canvas^ testCanvas = ref new Xaml::Controls::Canvas(); Xaml::Controls::Canvas^ childCanvas = ref new Xaml::

我正在为Windows8Metro编写一个应用程序,在理解Canvas的父子关系时遇到了一个问题。似乎当我将一个画布添加到另一个画布的子画布时,subcanvas'->parent属性等于null,直到父画布添加到可视化树。下面是一些显示问题的示例代码

Xaml::Controls::Canvas^ testCanvas = ref new Xaml::Controls::Canvas();
Xaml::Controls::Canvas^ childCanvas = ref new Xaml::Controls::Canvas();
testCanvas->Children->Append(childCanvas);

int size = testCanvas->Children->Size; // size will be equal to 1
if(!childCanvas->Parent)
{
// this code is executed because ->Parent is null. Why is parent here null??
}
aCanvasThatIsPartOfTheVisualTree->Children->Append(testCanvas);
if(!childCanvas->Parent)
{
// this code does not get executed because ->Parent is not null, now that testCanvas is part of the visual tree.
}
我还尝试使用VisualTreeHelper获取父对象:

Xaml::Controls::Canvas^ theParent = (Xaml::Controls::Canvas^)VisualTreeHelper::GetParent(childCanvas);
行为仍然存在:在将testCanvas添加到可视化树之前,parent为null,而在将testCanvas添加到可视化树之后,parent不为null


如果这不是一个bug,有人能告诉我如何在父节点不属于可视化树的情况下获取子节点的父节点吗?如果它是一个bug,是否有任何已知的解决方法?谢谢大家!

如果将
VisualTreeHelper
的名称分开,您将看到它是“VisualTree”帮助器。这意味着它正在获取元素的可视父元素。如果它当前不是可视化树的一部分,则它将没有由
VisualTreeHelper
定义的父级

从(在VisualTreeHelper.GetParent上)开始:

返回可视化树中对象的父对象

从(在控件获取其父属性的
FrameworkElement.Parent
上):

如果对象已实例化,但未附加到对象,则父对象可以为null 最终连接到页面对象根的。 在默认Windows运行时类中 FrameworkElement也可以预期为FrameworkElement 子类,如果它不为null。但是自定义类可能会引入 此假设不成立的内容模型


非常感谢您的澄清。那么,是否没有办法确定画布的父项在连接到可视化树的情况下会是什么样的呢?我认为,当画布没有连接到可视化树时,多个项目可以将其作为子项,因此单个“父项”就没有意义了。它需要一批家长。非常感谢。