12

根据MSDN - Panel.InternalChildren 属性

从Panel派生的类 应该使用此属性,而不是Children 属性,用于内部覆盖,例如MeasureCoreArrangeCore


所以,这真的是一个两部分的问题:

  1. 如果我创建自己的面板FooPanel,它派生自Panel,我似乎无法覆盖MeasureCoreArrangeCore。我不确定为什么会出现这种说法。但是,我可以覆盖MeasureOverrideand ArrangeOverride。所以,我想知道我是否还需要InternalChildren为这两种方法使用该属性。

  2. Children财产和财产之间的真正区别是什么InternalChildren

4

2 回答 2

12
  1. 您将覆盖 MeasureOverride 和 ArrangeOverride,这一定是文档中的错误,或者是针对 Microsoft 内部员工的。MeasureCore 和 ArrangeCore 由 FrameworkElement 密封,因此您不能覆盖它们。

  2. Children 属性是公共的,只需调用 InternalChildren,它是受保护的。所以任何一个都可能是安全的,因为孩子会被内联。

MSDN 另有说明(http://msdn.microsoft.com/en-us/library/ms754152.aspx),但文档有误。(使用反射器可以看到Children的实现只是调用了InternalChildren)

于 2011-04-07T17:27:05.250 回答
3

编辑:正如 CodeNaked 更正的那样 - MSDN 文档实际上是不正确的。InternalChildren 和 Children 是一样的。

使用反射器,您可以看到 Children 的实现,即public UIElementCollection Children { get { return this.InternalChildren; } }. 所以除非有一些伏都教正在发生,否则它们是相同的。


子项只是定期添加的子项,而 InternalChildren 包括通过数据绑定添加的子项(当面板为 ItemsPanelTemplate 时)

“Children 表示 Panel 所包含的元素的子集合。InternalChildren 表示 Children 集合的内容以及由数据绑定生成的那些成员。两者都由父 Panel 中托管的子元素的 UIElementCollection 组成。”

请参阅http://msdn.microsoft.com/en-us/library/ms754152.aspx

于 2012-02-09T15:44:15.737 回答