2011-02-15 21 views
7

好的,我知道FrameworkElementUIElement的直接子类,它有一个Parent属性,但面板的子类型为UIElement,而不是FrameworkElement(子类型为UIElementCollection),这似乎意味着您可以直接添加UIElement s到一个小组。如何获得UIElement的家长?

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

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

谢谢!

回答

6

那么,如果你需要找到一个逻辑父母,你可以像VisualTreeHelper一样使用LogicalTreeHelper

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

逻辑树:在被元素树术语来说,通用WPF 编程模型通常表示 。 支持表达 元素树作为逻辑树,并伴随 用于定义 树中标记在 FrameworkElement的电平实现的支持。但是请注意,FrameworkElement故意 未定义内容模型,并且 将该责任留给派生的 类。欲了解更多信息,请参阅 Trees in WPF

+0

我知道差异。在物理树和逻辑树之间。这不是我问的。我也不能在这里使用LogicalTreeHelper,因为画布很可能是Visual Tree的一部分。不过,我确实看到了你对父母的看法。那么我的观点就是为什么不创建单独的VisualParent呢?猜猜是什么让我无法选择,只能使用VisualTreeHelper(也可能是一个方便的附加方法)来获得父面板。即使在技术上它不是答案,但我仍然将它标记为这样,因为它看起来并不像是一个。 – MarqueIV 2011-02-17 04:26:20