在 WP7 应用程序中,我递归地使用 FrameworkElement.Parent 来确定特定元素是否在另一个元素内。但它并不总是正常工作。然后我更改了我的代码以递归地使用 VisualtreeHelper.GetParent 方法,并且它始终可以正常工作(据我测试)。
那么它们有什么区别呢?
谢谢
在 WP7 应用程序中,我递归地使用 FrameworkElement.Parent 来确定特定元素是否在另一个元素内。但它并不总是正常工作。然后我更改了我的代码以递归地使用 VisualtreeHelper.GetParent 方法,并且它始终可以正常工作(据我测试)。
那么它们有什么区别呢?
谢谢
考虑ControlA 是内容控件的地方,这意味着它可以包含其他控件ControlA
。ControlB
<ControlA>
<ControlB />
</ControlA>
在这种情况下,ControlB 实例的 Parent 属性在逻辑上是 ControlA 的一个实例。
但是,如果您查看Template
ControlA 的默认样式的设置器,您可能会发现复杂的 Xaml 包含一些视觉状态管理以及边界和网格的层次结构,最后埋在该地段中ContentPresenter
的是放置子控件的位置。
递归循环 VisualTreeHelper.Parent 将找到模板中定义的每个元素,从ContentPresenter
上到“逻辑”父元素,然后再往上。
“Silverlight 中 FrameworkElement.Parent 属性报告的值通常与使用 VisualTreeHelper API 报告的值相同,因为就如何报告父子关系而言,这两个树概念经常同步。但是,可能存在FrameworkElement.Parent 报告 VisualTreeHelper 没有的父级的情况。”
http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.parent(v=VS.95).aspx