【问题标题】:FrameworkElement.Parent and VisualtreeHelper.GetParent behaves differentlyFrameworkElement.Parent 和 VisualtreeHelper.GetParent 的行为不同
【发布时间】:2011-10-18 19:26:41
【问题描述】:

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

那么它们有什么区别呢?

谢谢

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 我已阅读该文档,但它没有解释它们何时以及为何表现不同。
    • 我明白这一点。 VisualTreeHelper.GetParent 给出 null 而 FrameworkElement.Parent 不为 null。不过这在 WinRT 上。
    【解决方案2】:

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

    <ControlA>
       <ControlB />
    </ControlA>
    

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

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

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

    【讨论】:

    • 意思是VisualTreeHelper.GetParent返回可视化树父,FrameworkElement.Parent返回逻辑树父?
    猜你喜欢
    • 2018-11-03
    • 2021-03-09
    • 2016-05-19
    • 2012-02-04
    • 2018-03-12
    • 1970-01-01
    • 2019-12-16
    • 2020-01-11
    • 1970-01-01
    相关资源
    最近更新 更多