Panel.Children vs Panel.InternalChildren -- 有什么区别?



根据MSDN - Panel。InternalChildren属性:

从Panel派生的类应该使用这个属性,而不是孩子们属性,用于内部重写这样的作为MeasureCore和ArrangeCore。


所以,这实际上是一个两部分的问题:

  1. 如果我创建一个我自己的面板,FooPanel,它来自Panel,我似乎无法覆盖MeasureCoreArrangeCore。我不知道为什么会有这样的说法。但是,我可以重写MeasureOverrideArrangeOverride。所以,我想知道我是否仍然需要使用InternalChildren属性的这两个方法。

  2. Children属性和InternalChildren属性之间的真正区别是什么?

  1. 您将重写MeasureOverride和ArrangeOverride,这一定是文档中的错误,或者是针对微软内部员工的。MeasureCore和ArrangeCore是由FrameworkElement封装的,所以你不能覆盖它们。

  2. Children属性是公共的,只是调用InternalChildren,它是受保护的。所以这两种方法都是安全的,因为儿童会被内联。

MSDN另有说明(http://msdn.microsoft.com/en-us/library/ms754152.aspx),但文档是错误的。


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

使用反射器,您可以看到Children的实现,即public UIElementCollection Children { get { return this.InternalChildren; } }。所以,除非有什么巫术在起作用,否则它们是一样的。


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

"Children表示Panel所属元素的子集合组成的。InternalChildren表示child的内容集合加上由数据绑定生成的那些成员。都是由包含父元素中的子元素的UIElementCollection面板。"

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

最新更新