Fix Window.MeasureOverride measuring with the old ClientSize #18338
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What does the pull request do?
This PR fixes
Window.MeasureOverride
incorrectly measuring its child using its oldClientSize
when theWidth
orHeight
of the window is manually set (andSizeToContent == Manual
).An existing unit test
Child_Should_Be_Measured_With_Width_And_Height_If_SizeToContent_Is_Manual
has been amended, making sure that the logic is still properly applied whenWindow.Width/Height
changes.What is the current behavior?
Setting
Window.Width/Height
triggers a measure pass with the oldClientSize
instead of the new bounds. The child's measure call is ignored (since the measure bounds haven't changed). However, this still updates the Window'sDesiredSize
to the new bounds, causing an arrange pass to be triggered. Later, the window bounds effectively change, causing another layout pass, this time callingMeasure
with the proper values.From the child's point of view,
Arrange
(from the first layout pass) is called beforeMeasure
(from the second layout pass).What is the updated/expected behavior with this PR?
The child is properly measured with the new bounds, causing a single normal measure pass.