Дочерний элемент может запросить больше места. Отвечает ли это родительскому элементу, зависит от родительского элемента.
MeasureCore вызывает MeasureOverride только на this
. Вы получаете только очень маленькую часть истории. Система размещения начинается с вызова Measure
на самом верхнем Panel
в дереве элементов, которое вызывает MeasureCore
на this
. Однако MeasureCore
в FrameworkElement
вызывает MeasureOverride
в нескольких местах.
Где вы видите ограничение от 0 до доступного размера?
Редактировать: Re: «ну, последняя строка MeasureCore ...»
Как я уже сказал, вы смотрите на небольшую часть всего, что происходит.
- У всех элементов управления есть 1 очень распространенный способ запросить больше места, чем им действительно нужно:
Margin
. Вам нужно написать собственный элемент управления, чтобы запросить еще больше места.
- Ограничения, которые вы видите в
MeasureCore
, насколько я могу судить, имеют отношение к пределам MinWidth
/ MinHeight
и MaxWidth
/ MaxHeight
, если они установлены.
Так что да, элемент управления - как сказано в документации - может запросить больше места, чем необходимо. Кажется, что ни один из элементов управления по умолчанию не делает этого, кроме своих Margin
s, и контейнеры, такие как панели, не должны это учитывать. Большинство обстоятельств не используют то, что вы читаете в документации, потому что в большинстве случаев это не имеет смысла ни с точки зрения родителя ребенка.
Если вы создали UserControl
, избавились от значений Width
и Height
в XAML и переопределили MeasureOverride
для возврата произвольного Size
, затем поместите его экземпляр в Canvas
, вы увидите его на Size
, который вы вернули.
Эта функция системы макета может быть полезна, если вы создаете пользовательские панели и пользовательские элементы управления или пользовательские элементы управления, но в противном случае, вероятно, нет. Но это там. Документация правильная.