好的,我知道 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/