4

在 WP7 应用程序中,我递归地使用 FrameworkElement.Parent 来确定特定元素是否在另一个元素内。但它并不总是正常工作。然后我更改了我的代码以递归地使用 VisualtreeHelper.GetParent 方法,并且它始终可以正常工作(据我测试)。

那么它们有什么区别呢?

谢谢

4

2 回答 2

4

考虑ControlA 是内容控件的地方,这意味着它可以包含其他控件ControlAControlB

<ControlA>
   <ControlB />
</ControlA>

在这种情况下,ControlB 实例的 Parent 属性在逻辑上是 ControlA 的一个实例。

但是,如果您查看TemplateControlA 的默认样式的设置器,您可能会发现复杂的 Xaml 包含一些视觉状态管理以及边界和网格的层次结构,最后埋在该地段中ContentPresenter的是放置子控件的位置。

递归循环 VisualTreeHelper.Parent 将找到模板中定义的每个元素,从ContentPresenter上到“逻辑”父元素,然后再往上。

于 2011-08-03T08:25:50.210 回答
1

“Silverlight 中 FrameworkElement.Parent 属性报告的值通常与使用 VisualTreeHelper API 报告的值相同,因为就如何报告父子关系而言,这两个树概念经常同步。但是,可能存在FrameworkElement.Parent 报告 VisualTreeHelper 没有的父级的情况。”

http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.parent(v=VS.95).aspx

于 2011-08-03T06:41:57.323 回答