【问题标题】:How can you get the parent of a UIElement?如何获得 UIElement 的父级?
【发布时间】:2011-06-27 09:06:11
【问题描述】:

好的,我知道FrameworkElementUIElement 的直接子类,它有一个Parent 属性,但是面板有UIElement 类型的孩子,而不是FrameworkElement(孩子是UIElementCollection 类型)这似乎意味着您可以将UIElements 直接添加到面板中。

也就是说,如果您有一个 UIElement 并想查看它是否有一个作为面板的父级,我知道如何测试它的唯一方法是使用 VisualTreeHelper,但这是可视化树,而不是逻辑树。 (至少我们知道 Panel 没有模板,所以也许是这样,但仍然......)

除了VisualTreeHelper 之外,有谁知道如何知道哪个面板是UIElement 的父级? (......有什么想法为什么他们不只是在那里定义一个 Parent 属性而不是在FrameworkElement 上?)

谢谢!

【问题讨论】:

    标签: wpf panel parent children uielement


    【解决方案1】:

    好吧,如果您需要找到一个逻辑父级,您可以使用 LogicalTreeHelperVisualTreeHelper 相同的方式。

    至于“......并且有任何想法为什么他们不只是在那里定义父属性而不是FrameworkElement?”。基本上,“逻辑树”的概念是在FrameworkElement 级别引入的。有关FrameworkElement 添加到UIElement 的详细信息,请参阅http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.aspx(请参阅备注)。以下是它对逻辑树的描述:

    逻辑树:通用 WPF 编程模型经常被表达 就元素树而言。 支持树的表达 元素作为逻辑树,以及 附带支持定义 标记中的树在 框架元素级别。但是请注意 那个FrameworkElement故意 没有定义内容模型,并且 将责任推给派生 类。有关详细信息,请参阅 Trees in WPF.

    【讨论】:

    • 我知道区别。在物理树和逻辑树之间。那不是我问的。我也不能在这里使用 LogicalTreeHelper,因为画布很可能是 Visual Tree 的一部分。但是,我确实看到了您对父母的看法。我的论点是为什么不创建单独的 VisualParent 呢?猜猜它归结为我别无选择,只能使用 VisualTreeHelper (为了方便起见,可能还有一个附加的方法)来获取父面板。尽管从技术上讲这不是答案,但我还是将其标记为这样,因为它看起来不像有答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    相关资源
    最近更新 更多