wpf - 如何获取 UIElement 的父级?

标签 wpf panel parent children uielement

好的,我知道 FrameworkElement ,它是 UIElement 的直接子类, 具有 Parent 属性,但 Panels 具有类型 UIElement 的子级,不是 FrameworkElement (子类型为 UIElementCollection )这似乎意味着您可以添加 UIElement s 直接到面板。

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

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

谢谢!

最佳答案

好吧,如果你需要找到一个逻辑父节点,你可以使用 LogicalTreeHelper以与 VisualTreeHelper 相同的方式.

至于“......并且有什么想法为什么他们不只是在那里定义一个 Parent 属性而不是在 FrameworkElement 上?”。基本上,“逻辑树”的概念是在 FrameworkElement 上引入的。等级。见 http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.aspx (见备注)详情FrameworkElement添加到 UIElement .这是关于逻辑树的说明:

The logical tree: The general WPF programming model is often expressed in terms of being a tree of elements. Support for expressing the tree of elements as a logical tree, and accompanying support for defining that tree in markup is implemented at the FrameworkElement level. Note however that FrameworkElement deliberately does not define a content model, and leaves that responsibility to derived classes. For more information, see Trees in WPF.

关于wpf - 如何获取 UIElement 的父级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5000228/

相关文章:

wpf - DrawingVisual 不显示在窗口内的 WPF Canvas 中

wpf - 带百分比坐标的面板

caching - Entity Framework 4.4,重新加载子集合对象

php - 以正确的顺序递归父项以从 MySQL 表中删除

c# - 为什么我的 FlowDocument 不使用整个宽度?

c# - 在透明的 Windows.Form 中托管 WPF UserControl

c# - 如何在自定义 WPF 控件中初始化集合属性

c# - 带有 Windows 窗体的 XNA - 打开新窗口

java - 绘图板尺寸

java - 如何从 Jython 调用由 Java 类执行的 Java 方法?