From de3fdf57c7ee0af98e5d958a1a62595636b885f0 Mon Sep 17 00:00:00 2001 From: Paul DiPietro Date: Fri, 17 Feb 2017 04:42:33 -0600 Subject: [PATCH] [WinRT/UWP] Insert missing SendScrollFinished call (#751) --- .../Bugzilla44940.cs | 94 ++++++++++++++++++++++ .../Xamarin.Forms.Controls.Issues.Shared.projitems | 1 + Xamarin.Forms.Platform.WinRT/ScrollViewRenderer.cs | 1 + 3 files changed, 96 insertions(+) create mode 100644 Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla44940.cs diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla44940.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla44940.cs new file mode 100644 index 0000000..57c686b --- /dev/null +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla44940.cs @@ -0,0 +1,94 @@ +using Xamarin.Forms.CustomAttributes; +using Xamarin.Forms.Internals; +using System.Threading.Tasks; + +#if UITEST +using Xamarin.UITest; +using NUnit.Framework; +#endif + +// Apply the default category of "Issues" to all of the tests in this assembly +// We use this as a catch-all for tests which haven't been individually categorized +#if UITEST +[assembly: NUnit.Framework.Category("Issues")] +#endif + +namespace Xamarin.Forms.Controls.Issues +{ + [Preserve(AllMembers = true)] + [Issue(IssueTracker.Bugzilla, 44940, "[WinRT/UWP] ScrollView.ScrollToAsync does not return from await", PlatformAffected.WinRT)] + public class Bugzilla44940 : TestContentPage + { + Label _statusLabel; + Entry _firstEntry; + Entry _secondEntry; + StackLayout _verticalStackLayout; + ScrollView _scrollView; + + protected override void Init() + { + _statusLabel = new Label + { + Text = "With focus on first Entry, hit Return key", + HorizontalOptions = LayoutOptions.CenterAndExpand, + LineBreakMode = LineBreakMode.WordWrap + }; + + _firstEntry = new Entry + { + HorizontalOptions = LayoutOptions.FillAndExpand, + VerticalOptions = LayoutOptions.CenterAndExpand, + }; + + _secondEntry = new Entry + { + HorizontalOptions = LayoutOptions.FillAndExpand, + VerticalOptions = LayoutOptions.CenterAndExpand, + }; + + _firstEntry.Completed += FirstEntryCompleted; + + _verticalStackLayout = new StackLayout + { + HorizontalOptions = LayoutOptions.FillAndExpand, + VerticalOptions = LayoutOptions.FillAndExpand, + Padding = new Thickness(0, 0, 0, 0), + Margin = new Thickness(0, 0, 0, 0), + Spacing = 5, + Children = + { + _statusLabel, + _firstEntry, + _secondEntry + } + }; + + _scrollView = new ScrollView + { + Orientation = ScrollOrientation.Vertical, + HorizontalOptions = LayoutOptions.CenterAndExpand, + VerticalOptions = LayoutOptions.FillAndExpand, + Margin = new Thickness(10, 5, 10, 0), + Padding = new Thickness(0, 0, 0, 0), + Content = _verticalStackLayout + }; + + Content = _scrollView; + + Device.BeginInvokeOnMainThread(async () => + { + await Task.Delay(100); + _firstEntry.Focus(); + }); + } + + async void FirstEntryCompleted(object sender, System.EventArgs e) + { + _firstEntry?.Unfocus(); + _statusLabel.Text = "Attempting scroll. Return from await pending..."; + await _scrollView.ScrollToAsync(_secondEntry, ScrollToPosition.MakeVisible, false); + _statusLabel.Text = "This should be visible on WinRT/UWP"; + _secondEntry?.Focus(); + } + } +} \ No newline at end of file diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems index f6100c6..8aa7217 100644 --- a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems @@ -152,6 +152,7 @@ + diff --git a/Xamarin.Forms.Platform.WinRT/ScrollViewRenderer.cs b/Xamarin.Forms.Platform.WinRT/ScrollViewRenderer.cs index 6938a76..0be6ba2 100644 --- a/Xamarin.Forms.Platform.WinRT/ScrollViewRenderer.cs +++ b/Xamarin.Forms.Platform.WinRT/ScrollViewRenderer.cs @@ -146,6 +146,7 @@ namespace Xamarin.Forms.Platform.WinRT { Control.ChangeView(x, y, null, !e.ShouldAnimate); } + Controller.SendScrollFinished(); } void OnViewChanged(object sender, ScrollViewerViewChangedEventArgs e) -- 2.7.4