8

好的,我知道FrameworkElement,它是 的直接子类UIElement,具有 Parent 属性,但是 Panels 的子类是 type UIElement,而不是FrameworkElement(Children is of type UIElementCollection),这似乎意味着您可以将UIElements 直接添加到 Panel 中。

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

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

谢谢!

4

1 回答 1

7

好吧,如果您需要找到一个合乎逻辑的父级,您可以LogicalTreeHelper以与VisualTreeHelper.

至于“......有什么想法为什么他们不只是在那里定义一个 Parent 属性而不是 on FrameworkElement?”。基本上,在FrameworkElement关卡上引入了“逻辑树”的概念。有关添加FrameworkElementUIElement. _ 这是关于逻辑树的内容:

逻辑树:一般的 WPF 编程模型通常用元素树来表示。对将元素树表示为逻辑树的支持以及对在标记中定义该树的伴随支持在 FrameworkElement 级别实现。但是请注意,FrameworkElement 故意不定义内容模型,并将该责任留给派生类。有关详细信息,请参阅 WPF 中的树

于 2011-02-15T10:01:41.547 回答