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

标签 .net silverlight windows-phone-7 visualtreehelper frameworkelement

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

那么它们有什么区别呢?

谢谢

最佳答案

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

<ControlA>
   <ControlB />
</ControlA>

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

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

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

关于.net - FrameworkElement.Parent 和 VisualtreeHelper.GetParent 的行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6921881/

相关文章:

c# - Entity Framework 运行存储过程和 native 查询性能注意事项

silverlight - 如何在 Silverlight BackgroundWorker 中运行批处理 WCF 服务调用

c# - 适用于 Windows Phone 的锁屏应用程序

c# - 长列表选择器跳转列表屏幕windows phone

c# - Windows XP 上 WPD/WIA 的替代方案?

c# - .Net、索引以外的 Azure 路由无法正常工作,如何修复此问题?

c# - Quartz.net - 自定义时间触发

wcf - Silverlight并发WCF

c# - 由于 System.Windows.Point/System.Drawing.PointF 差异,在 WPF/Silverlight 和 GDI+ 之间共享库时出现问题

c# - 如何从 Windows Phone 8.1 中的 Assets 文件夹中获取图像并将其分配给模型的属性