diff options
Diffstat (limited to 'Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue2259.cs')
-rw-r--r-- | Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue2259.cs | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue2259.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue2259.cs new file mode 100644 index 00000000..125f1a60 --- /dev/null +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue2259.cs @@ -0,0 +1,156 @@ +using System; +using System.Collections.ObjectModel; + +using Xamarin.Forms; +using Xamarin.Forms.CustomAttributes; + +#if UITEST +using NUnit.Framework; +using Xamarin.UITest; +#endif + +namespace Xamarin.Forms.Controls +{ + [Preserve (AllMembers=true)] + [Issue (IssueTracker.Github, 2259, "ListView.ScrollTo crashes app", PlatformAffected.iOS)] + public class Issue2259 : TestContentPage + { + [Preserve (AllMembers = true)] + public class Person + { + public string Name { private set; get; } + + public DateTime Birthday { private set; get; } + + public Color FavoriteColor { private set; get; } + + public Person (string name, DateTime birthday, Color favoriteColor) + { + Name = name; + Birthday = birthday; + FavoriteColor = favoriteColor; + } + }; + + int _count = 1; + + protected override void Init () + { + var people = new ObservableCollection<Person> { + new Person ("Abigail", new DateTime (1975, 1, 15), Color.Aqua), + new Person ("Bob", new DateTime (1976, 2, 20), Color.Black), + new Person ("Cathy", new DateTime (1977, 3, 10), Color.Blue), + new Person ("David", new DateTime (1978, 4, 25), Color.Fuschia), + }; + + var buttonAdd = new Button { + Text = "Add", + HorizontalOptions = LayoutOptions.Start, + VerticalOptions = LayoutOptions.Center, + }; + + var buttonRemove = new Button { + Text = "Remove", + HorizontalOptions = LayoutOptions.Center, + VerticalOptions = LayoutOptions.Center, + }; + + var buttonScrollToBottom = new Button { + Text = "Bottom", + HorizontalOptions = LayoutOptions.Start, + VerticalOptions = LayoutOptions.Center, + }; + + var buttonStack = new StackLayout { + Orientation = StackOrientation.Horizontal, + Children = { + buttonAdd, + buttonRemove, + buttonScrollToBottom, + } + }; + + var listView = new ListView { + HorizontalOptions = LayoutOptions.FillAndExpand, + VerticalOptions = LayoutOptions.FillAndExpand, + ItemsSource = people, + ItemTemplate = new DataTemplate (() => + { + var nameLabel = new Label (); + var birthdayLabel = new Label (); + var boxView = new BoxView (); + + var stack = new StackLayout { + Padding = new Thickness (0, 5), + Orientation = StackOrientation.Horizontal, + BackgroundColor = Color.Black, + Children = { + boxView, + new StackLayout { + VerticalOptions = LayoutOptions.Center, + Spacing = 0, + Children = { + nameLabel, + birthdayLabel + } + } + } + }; + + nameLabel.SetBinding (Label.TextProperty, "Name"); + birthdayLabel.SetBinding (Label.TextProperty, new Binding ("Birthday", BindingMode.OneWay, null, null, "Born {0:d}")); + boxView.SetBinding (BoxView.ColorProperty, "FavoriteColor"); + stack.SetBinding (BackgroundColorProperty, "BackgroundColor"); + + return new ViewCell { + View = stack + }; + }) + }; + + buttonAdd.Clicked += (sender, e) => + { + var person = new Person (string.Format ("Name {0}", _count++), DateTime.Today, Color.Blue); + + people.Add (person); + + listView.ScrollTo (person, ScrollToPosition.End, true); + + }; + + buttonRemove.Clicked += (sender, e) => people.RemoveAt (people.Count - 1); + + buttonScrollToBottom.Clicked += (sender, e) => + { + var person = people[people.Count - 1]; + + listView.ScrollTo (person, ScrollToPosition.End, true); + }; + + Padding = new Thickness (10, Device.OnPlatform (20, 0, 0), 10, 5); + + Content = new StackLayout { + Orientation = StackOrientation.Vertical, + Children = { + buttonStack, + listView, + } + }; + } + +#if UITEST + [Test] + [UiTest (typeof(ListView), "ScrollTo")] + public void Issue2259Tests () + { + for (int i = 0; i < 20; i++) { + RunningApp.Tap (q => q.Button ("Add")); + RunningApp.WaitForElement (q => q.Marked ("Name " + (i + 1).ToString ())); + RunningApp.Screenshot ("Added Cell"); + } + } +#endif + } +} + + |