2011-04-07 61 views
8

根據MSDN - Panel.InternalChildren Property:從它們Panel 衍生應使用此屬性WPF Panel.Children vs Panel.InternalChildren - 有什麼區別?

類,而不是 的Children 屬性,用於內部覆蓋這樣 如MeasureCoreArrangeCore


所以,這的確是一個2部分的問題:

  1. 如果我創造我自己的,FooPanel,從Panel派生的面板,我似乎無法覆蓋MeasureCoreArrangeCore。我不知道爲什麼那個聲明甚至在那裏。但是,我可以覆蓋MeasureOverrideArrangeOverride。所以,我想知道是否還需要使用這兩種方法的InternalChildren屬性。

  2. Children屬性和InternalChildren屬性之間的實際區別是什麼?

回答

9
  1. 你會重寫的MeasureOverride和ArrangeOverride,那一定是在文檔中出錯,或用於微軟內部員工。 MeasureCore和ArrangeCore由FrameworkElement封裝,所以你不能覆蓋它們。

  2. Children屬性是公共的,只是簡單地調用InternalChildren,它受到保護。所以要麼是安全的,因爲孩子會被內聯。

MSDN否則說(http://msdn.microsoft.com/en-us/library/ms754152.aspx)但文檔是錯誤的。 (使用反射地看到,兒童的實現調用InternalChildren)

+0

+1,我只是看着與dotPeek代碼,在Petzold的書,在這裏順便說一下他使用的MeasureOverride和ArrangeOverride但InternalChildren閱讀兒童VS InternalChildren後 – RichardOD 2011-12-03 15:00:39

+0

兒童和internalchildren是不等價 – 2012-02-09 15:44:59

+0

或者我們看看源代碼:http://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/Windows/Controls/Panel.cs#171 – 2014-05-24 18:30:04

1

編輯: 作爲CodeNaked修正 - MSDN文檔其實不正確。 InternalChildren和Children是一樣的。


孩子只是有規律地補充說,孩子們,而InternalChildren包括通過數據添加綁定兒童(當面板是ItemsPanelTemplate)

「兒童代表元素的的子集Panel由 組成,其中InternalChildren表示子集 的內容加上通過數據綁定生成的成員。兩者都包含 的子元素UIElementCollection,父子元素在 Panel內。「

看到http://msdn.microsoft.com/en-us/library/ms754152.aspx

+2

對不起,但是文檔不正確。 ,你可以看到'Children'的實現是'public UIElementCollection Children {get {return this.InternalChildren;}}'。所以除非有是一些巫術正在發生,他們是一樣的。 – CodeNaked 2012-02-09 16:36:12

+0

我站好了。一旦解除表決權,我會投票。學到了新東西,謝謝! – 2012-02-09 17:27:44

相關問題