2011-02-15 64 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