2011-04-07 99 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

相关问题