summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue2259.cs
diff options
context:
space:
mode:
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.cs156
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
+ }
+}
+
+