WPF Panel.Children vs Panel.InternalChildren - Какая разница? - PullRequest
8 голосов
/ 07 апреля 2011

Согласно MSDN - свойство Panel.InternalChildren :

Классы, производные от Panel следует использовать это свойство, а не Дети свойство, для внутренних переопределений, таких как как MeasureCore и ArrangeCore .


Итак, это действительно вопрос из двух частей:

  1. Если я создам собственную панель FooPanel, которая получена из Panel, я не могу переопределить MeasureCore или ArrangeCore. Я не уверен, почему это утверждение даже там. Я могу, однако, переопределить MeasureOverride и ArrangeOverride. Итак, мне интересно, нужно ли мне использовать свойство InternalChildren для этих двух методов.

  2. Какова реальная разница между свойством Children и свойством InternalChildren?

Ответы [ 2 ]

9 голосов
/ 07 апреля 2011
  1. Вы должны переопределить MeasureOverride и ArrangeOverride, что должно быть ошибкой в ​​документации или предназначено для внутренних сотрудников Microsoft. MeasureCore и ArrangeCore запечатаны FrameworkElement, поэтому вы не можете их переопределить.

  2. Свойство Children является открытым и просто вызывает InternalChildren, который защищен. Таким образом, любой из них, вероятно, безопасен, так как дети будут вставлены.

MSDN говорит иначе (http://msdn.microsoft.com/en-us/library/ms754152.aspx), но документация неверна. (Используйте рефлектор, чтобы увидеть, что реализация Children просто вызывает InternalChildren)

1 голос
/ 09 февраля 2012

РЕДАКТИРОВАТЬ: Как исправлено CodeNaked - документы MSDN на самом деле неверны.InternalChildren и Children - это то же самое.


Дочерние элементы - это просто дочерние элементы, которые регулярно добавлялись, тогда как InternalChildren включает дочерние элементы, которые были добавлены с помощью привязки данных (когда панель представляет собой ItemsPanelTemplate)

«Дочерние элементы представляют дочернюю коллекцию элементов, из которой состоит Panel. InternalChildren представляет содержимое коллекции« Дети »плюс элементы, созданные с помощью привязки данных. Оба элемента представляют собой UIElementCollection дочерних элементов, размещенных в родительской панели.»

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

...