2011-04-07 11 views
8

Según MSDN - Panel.InternalChildren Property:WPF Panel.Children vs Panel.InternalChildren - ¿Cuál es la diferencia?

Las clases que se derivan de Panel debe utilizar esta propiedad, en lugar de la propiedad Children , por anulaciones internos tales como MeasureCore y ArrangeCore.


lo tanto, esto es realmente una cuestión de 2 partes:

  1. Si creo un panel de la mía, FooPanel, que deriva de Panel, me parece que no puede anular MeasureCore o ArrangeCore. No estoy seguro de por qué esa declaración está incluso allí. Sin embargo, puedo anular MeasureOverride y ArrangeOverride. Entonces, me pregunto si todavía necesito usar la propiedad InternalChildren para estos 2 métodos.

  2. ¿Cuál es la diferencia real entre la propiedad Children y la propiedad InternalChildren?

Respuesta

9
  1. Se podría anular MeasureOverride y ArrangeOverride, que debe ser un error en la documentación, o destinados a ser empleados internos de Microsoft. MeasureError sella MeasureCore y ArrangeCore, por lo que no puede anularlos.

  2. La propiedad de The Children es pública y simplemente llama a InternalChildren, que está protegida. Por lo tanto, probablemente sea seguro, ya que Children se innsularía.

MSDN dice lo contrario (http://msdn.microsoft.com/en-us/library/ms754152.aspx) pero la documentación es incorrecta. (Uso del reflector para ver que la aplicación de los niños simplemente llama InternalChildren)

+0

1, acabo de mirar el código con dotPeek, después de leer sobre niños vs InternalChildren en el libro de Petzold, donde por cierto se utiliza MeasureOverride y ArrangeOverride pero con InternalChildren. – RichardOD

+0

niños y internalchildren son no es equivalente –

+0

O nos fijamos en la fuente: http://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/Windows/Controls/Panel.cs#171 –

1

EDIT: Como CodeNaked corregido - docs MSDN son de hecho incorrecto. InternalChildren y Children son lo mismo.


niños son sólo los niños que fueron añadidos regularmente, mientras que InternalChildren incluye a los niños que se agregaron a través de enlace de datos (cuando el panel es el ItemsPanelTemplate)

"Los niños representa la colección niño de elementos que las El panel es compuesto por. InternalChildren representa el contenido de la colección Children más los miembros generados por el enlace de datos. Ambos consisten en de un UIElementCollection de elementos secundarios alojados en el panel primario ."

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

+2

Lo sentimos, pero los documentos no son correctos. , puede ver la implementación de 'Children' que es' public UIElementCollection Children {get {return this.InternalChildren;}} '. A menos que haya hay algo de vudú, son lo mismo. – CodeNaked

+0

Estoy parado. Voy a votar tan pronto como se levante el bloqueo de votos. aprendí algo nuevo, gracias! –

Cuestiones relacionadas