Fix VirtualizingStackPanel ScrollIntoView #15449
Merged
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?
Fixes
VirtualizingStackPanel.ScrollIntoView
to prevent duplicate items and elements not being correctly scrolled into view with variable sized items.This problem often shows up when scrolling with the keyboard because keyboard navigation uses
ScrollIntoView
internally. What was happening was the following:This PR fixes this by using the "scroll to" element as the "anchor" in step 4; that is, realization is started from the "scroll to" element rather than the first element visible in the viewport. This ensures that the "scroll to" element is guaranteed to be realized and visible. In addition when we're waiting for a viewport update and have a "scroll to" element, we use that element's position to calculate our desired size.
I looked through the open issues for
ItemsControl
but didn't find an open one that reported this exact problem with a repro, though various comments suggested that they were hitting it.