根据MSDN - Panel。InternalChildren属性:
从Panel派生的类应该使用这个属性,而不是孩子们属性,用于内部重写这样的作为MeasureCore和ArrangeCore。
所以,这实际上是一个两部分的问题:
-
如果我创建一个我自己的面板,
FooPanel
,它来自Panel
,我似乎无法覆盖MeasureCore
或ArrangeCore
。我不知道为什么会有这样的说法。但是,我可以重写MeasureOverride
和ArrangeOverride
。所以,我想知道我是否仍然需要使用InternalChildren
属性的这两个方法。 -
Children
属性和InternalChildren
属性之间的真正区别是什么?
-
您将重写MeasureOverride和ArrangeOverride,这一定是文档中的错误,或者是针对微软内部员工的。MeasureCore和ArrangeCore是由FrameworkElement封装的,所以你不能覆盖它们。
-
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