Skip to content

Commit 7120c9e

Browse files
Ensure BringIntoView request is not skipped for direct content of ScrollView (#6889)
* Ensure BringIntoView request is not skipped for direct content of ScrollView * Test for BringIntoView for direct content * Move test to correct location and rename
1 parent 9aee101 commit 7120c9e

File tree

2 files changed

+40
-2
lines changed

2 files changed

+40
-2
lines changed

dev/ScrollPresenter/APITests/ScrollPresenterBringIntoViewTests.cs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
using ScrollingBringingIntoViewEventArgs = Microsoft.UI.Xaml.Controls.ScrollingBringingIntoViewEventArgs;
3131
using ScrollPresenterTestHooks = Microsoft.UI.Private.Controls.ScrollPresenterTestHooks;
3232
using ScrollPresenterViewChangeResult = Microsoft.UI.Private.Controls.ScrollPresenterViewChangeResult;
33+
using Windows.UI.Xaml.Shapes;
3334

3435
namespace Windows.UI.Xaml.Tests.MUXControls.ApiTests
3536
{
@@ -743,6 +744,43 @@ public void BringNestedElementIntoVerticalScrollViewerViewWithOffset()
743744
options);
744745
}
745746

747+
[TestMethod]
748+
[TestProperty("Description", "ScrollPresenter should handle BringIntoView for its direct content.")]
749+
public void BringContentWithMarginIntoView()
750+
{
751+
ScrollPresenter scrollPresenter = null;
752+
Rectangle rectangleScrollPresenterContent = null;
753+
AutoResetEvent scrollPresenterViewChangedEvent = new AutoResetEvent(false);
754+
AutoResetEvent scrollPresenterLoadedEvent = new AutoResetEvent(false);
755+
756+
RunOnUIThread.Execute(() =>
757+
{
758+
rectangleScrollPresenterContent = new Rectangle() { Margin = new Thickness(0, 500, 0, 0) };
759+
scrollPresenter = new ScrollPresenter();
760+
761+
SetupDefaultUI(scrollPresenter, rectangleScrollPresenterContent, scrollPresenterLoadedEvent);
762+
});
763+
764+
WaitForEvent("Waiting for Loaded event", scrollPresenterLoadedEvent);
765+
766+
RunOnUIThread.Execute(() =>
767+
{
768+
scrollPresenter.ViewChanged += (s, e) =>
769+
{
770+
scrollPresenterViewChangedEvent.Set();
771+
};
772+
773+
rectangleScrollPresenterContent.StartBringIntoView(new BringIntoViewOptions() { AnimationDesired = false });
774+
});
775+
776+
WaitForEvent("Waiting for ViewChanged event", scrollPresenterViewChangedEvent);
777+
778+
RunOnUIThread.Execute(() =>
779+
{
780+
Verify.AreEqual(500.0, scrollPresenter.VerticalOffset);
781+
});
782+
}
783+
746784
private void BringElementIntoViewWithAlignment(
747785
Orientation orientation,
748786
double alignmentRatio,

dev/ScrollPresenter/ScrollPresenter.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4472,7 +4472,7 @@ void ScrollPresenter::OnBringIntoViewRequestedHandler(
44724472
args.Handled() ||
44734473
args.TargetElement() == static_cast<winrt::UIElement>(*this) ||
44744474
(args.TargetElement() == content && content.Visibility() == winrt::Visibility::Collapsed) ||
4475-
!SharedHelpers::IsAncestor(args.TargetElement(), content, true /*checkVisibility*/))
4475+
(args.TargetElement() != content && !SharedHelpers::IsAncestor(args.TargetElement(), content, true /*checkVisibility*/)))
44764476
{
44774477
// Ignore the request when:
44784478
// - There is no InteractionTracker to fulfill it.
@@ -4525,7 +4525,7 @@ void ScrollPresenter::OnBringIntoViewRequestedHandler(
45254525
args.Handled() ||
45264526
args.TargetElement() == static_cast<winrt::UIElement>(*this) ||
45274527
(args.TargetElement() == content && content.Visibility() == winrt::Visibility::Collapsed) ||
4528-
!SharedHelpers::IsAncestor(args.TargetElement(), content, true /*checkVisibility*/))
4528+
(args.TargetElement() != content && !SharedHelpers::IsAncestor(args.TargetElement(), content, true /*checkVisibility*/)))
45294529
{
45304530
// Again, ignore the request when:
45314531
// - There is no Content anymore.

0 commit comments

Comments
 (0)