Нельзя изменить напрямую DesiredSize, поскольку только UIElement может записывать в DesiredSize, что происходит в
UIElement.Measure (). Однако Measure () не вычисляет DesiredWidth, а вместо этого вызывает MeasurementCore. Но даже MeasurementCore не рассчитывает DesiredSize напрямую, а вместо этого использует значение retunr для MeasurementOverride. Вот почему вы должны переопределить MeasurementOverride (), чтобы изменить DesiredChange: -)
Это выглядит так:
UIElement.Measure() calls
FrameworkElement.MeasureCore() calls
YourControl.MeasureOverwrite()
Возвращаемое значение MeasureOverwrite () становится возвращаемым значением MeasureCore (), которое затем сохраняется в UIElement.DesiredSize.
Обратите внимание, что значение, возвращаемое MeasureOverwrite (), не обязательно совпадает с сохраненным в DesiredSize, потому что поле возвращается к возвращенному значению! FrameworkElement.MeasurementCore () также гарантирует, что DesiredSize находится в пределах MinWidth, MaxWidth и Height, соответственно. Если ширина или высота возвращаемого значения isInfinite of isNaN, генерируется исключение.