FrameworkElement.Parent 和 VisualtreeHelper.GetParent 的行为不同
在 WP7 应用程序中,我递归地使用 FrameworkElement.Parent 来确定特定元素是否位于另一个元素内部。但它并不总是能正常工作。 然后我更改了代码以递归地使用 VisualtreeHelper.GetParent 方法,并且它始终正常工作(据我测试)。
那么它们有什么区别呢?
谢谢
In a WP7 app, I used FrameworkElement.Parent recursively to determine whether a specific element is inside of another element. But it does not always work correctly.
Then I changed my code to use VisualtreeHelper.GetParent method recursively, and it always work correctly(so far as I tested).
So what is the difference of them?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
考虑
ControlA
和ControlB
,其中 ControlA 是内容控件,意味着它可以包含其他控件。在这种情况下,逻辑上 ControlB 实例的 Parent 属性是 ControlA 的实例。
但是,如果您查看 ControlA 默认样式的
Template
setter,您可能会发现复杂的 Xaml,其中包含一些视觉状态管理以及边框和网格的层次结构,最后埋在其中有一个ContentPresenter
将放置子控件的位置。递归循环 VisualTreeHelper.Parent 将找到模板中定义的每个元素,从
ContentPresenter
到“逻辑”父元素,然后再超出。Consider
ControlA
andControlB
where ControlA is a content control meaning it can contain other controls.Logically the Parent property of the ControlB instance is an instance of ControlA in this case.
However if you were to look at
Template
setter of the default style of ControlA you may find complex Xaml containing some visual state management and a hierarchy of Borders and Grids and finally buried in that lot there is aContentPresenter
where the child control will be placed.Recursively looping up VisualTreeHelper.Parent will find each element defined in the template from the
ContentPresenter
up to the "logical" parent element and then beyond.http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.parent(v=VS.95).aspx
http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.parent(v=VS.95).aspx