FrameworkElement.Parent 和 VisualtreeHelper.GetParent 的行为不同

发布于 2024-11-28 03:24:52 字数 174 浏览 1 评论 0原文

在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

旧城空念 2024-12-05 03:24:52

考虑 ControlAControlB,其中 ControlA 是内容控件,意味着它可以包含其他控件。

<ControlA>
   <ControlB />
</ControlA>

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

但是,如果您查看 ControlA 默认样式的 Template setter,您可能会发现复杂的 Xaml,其中包含一些视觉状态管理以及边框和网格的层次结构,最后埋在其中有一个 ContentPresenter 将放置子控件的位置。

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

Consider ControlA and ControlB where ControlA is a content control meaning it can contain other controls.

<ControlA>
   <ControlB />
</ControlA>

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 a ContentPresenter 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.

小霸王臭丫头 2024-12-05 03:24:52

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

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

"The value reported by the FrameworkElement.Parent property in
Silverlight is generally the same value that would be reported by
using VisualTreeHelper API, because the two tree concepts are
frequently synchronized as far as how parent-child relationships are
reported. However, there may be cases where FrameworkElement.Parent
reports a parent that VisualTreeHelper does not."

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文