summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Controls/GalleryPages/ScrollGallery.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Controls/GalleryPages/ScrollGallery.cs')
-rw-r--r--Xamarin.Forms.Controls/GalleryPages/ScrollGallery.cs158
1 files changed, 158 insertions, 0 deletions
diff --git a/Xamarin.Forms.Controls/GalleryPages/ScrollGallery.cs b/Xamarin.Forms.Controls/GalleryPages/ScrollGallery.cs
new file mode 100644
index 00000000..cf00482d
--- /dev/null
+++ b/Xamarin.Forms.Controls/GalleryPages/ScrollGallery.cs
@@ -0,0 +1,158 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Xamarin.Forms.Controls
+{
+ public class ScrollGallery : ContentPage
+ {
+ readonly ScrollView _scrollview;
+ readonly StackLayout _stack;
+ ScrollOrientation _orientation;
+ List<Button> _buttons = new List<Button> ();
+ Button _toNavigateTo;
+ public ScrollGallery (ScrollOrientation orientation = ScrollOrientation.Vertical)
+ {
+ _orientation = orientation;
+ var root = new Grid ();
+ root.RowDefinitions.Add (new RowDefinition () { Height = GridLength.Auto });
+ root.RowDefinitions.Add (new RowDefinition () { Height = GridLength.Auto });
+ root.RowDefinitions.Add (new RowDefinition () { Height = GridLength.Auto });
+ root.RowDefinitions.Add (new RowDefinition ());
+
+ var btnStack1 = new StackLayout { Orientation = StackOrientation.Horizontal };
+ var btnStack = new StackLayout { Orientation = StackOrientation.Horizontal };
+ var btn = new Button { Text = "Scroll to 100" };
+ var btn4 = new Button { Text = "Scroll to 100 no anim" };
+ var btn1 = new Button { Text = "Start" };
+ var btn2 = new Button { Text = "Center" };
+ var btn3 = new Button { Text = "End" };
+ var btn6 = new Button { Text = "MakeVisible", HorizontalOptions= LayoutOptions.CenterAndExpand, BackgroundColor = Color.Accent };
+
+ var label = new Label { Text = string.Format ("X: {0}, Y: {1}", 0, 0) };
+
+ root.Children.Add (label);
+ root.Children.Add (btnStack);
+ root.Children.Add (btnStack1);
+
+ btnStack.Children.Add (btn1);
+ btnStack.Children.Add (btn2);
+ btnStack.Children.Add (btn3);
+
+ btnStack1.Children.Add (btn);
+ btnStack1.Children.Add (btn4);
+
+ Grid.SetRow (btnStack, 1);
+ Grid.SetRow (btnStack1, 2);
+
+ var grid = new Grid ();
+ grid.RowDefinitions.Add (new RowDefinition { Height = GridLength.Auto });
+ grid.RowDefinitions.Add (new RowDefinition ());
+ _stack = new StackLayout ();
+ Grid.SetRow (_stack, 1);
+ grid.Children.Add (btn6);
+ grid.Children.Add (_stack);
+ _scrollview = new ScrollView {
+ AutomationId="thescroller",
+ BackgroundColor = Color.Aqua,
+ Content = grid
+ };
+ root.Children.Add (_scrollview);
+ Grid.SetRow (_scrollview, 3);
+
+ _scrollview.Scrolled+= (object sender, ScrolledEventArgs e) => {
+ label.Text = string.Format ("X: {0}, Y: {1}", e.ScrollX, e.ScrollY);
+ };
+
+ btn.Clicked += async (object sender, EventArgs e) => {
+ switch (orientation) {
+ case ScrollOrientation.Horizontal:
+ await _scrollview.ScrollToAsync (100, 0, true);
+ break;
+ case ScrollOrientation.Vertical:
+ await _scrollview.ScrollToAsync (0, 100, true);
+ break;
+ case ScrollOrientation.Both:
+ await _scrollview.ScrollToAsync (100, 100, true);
+ break;
+ }
+ };
+ btn4.Clicked += async (object sender, EventArgs e) => {
+ switch (orientation) {
+ case ScrollOrientation.Horizontal:
+ await _scrollview.ScrollToAsync (100, 0, false);
+ break;
+ case ScrollOrientation.Vertical:
+ await _scrollview.ScrollToAsync (0, 100, false);
+ break;
+ case ScrollOrientation.Both:
+ await _scrollview.ScrollToAsync (100, 100, true);
+ break;
+ }
+ };
+
+ btn1.Clicked += async (object sender, EventArgs e) => {
+ await _scrollview.ScrollToAsync (_toNavigateTo, ScrollToPosition.Start, true);
+ };
+ btn2.Clicked += async (object sender, EventArgs e) => {
+ await _scrollview.ScrollToAsync (_toNavigateTo, ScrollToPosition.Center, true);
+ };
+ btn3.Clicked += async (object sender, EventArgs e) => {
+ await _scrollview.ScrollToAsync (_toNavigateTo, ScrollToPosition.End, true);
+ };
+ btn6.Clicked += async (object sender, EventArgs e) => {
+ await _scrollview.ScrollToAsync (_toNavigateTo, ScrollToPosition.MakeVisible, true);
+ };
+
+ _stack.Padding = new Size (20, 60);
+
+ PopulateStack (_stack);
+
+ _scrollview.Orientation = _orientation;
+
+ if (orientation == ScrollOrientation.Horizontal || orientation == ScrollOrientation.Both) {
+ _stack.Orientation = StackOrientation.Horizontal;
+ }
+
+ if (orientation == ScrollOrientation.Both) {
+ var stack2 = new StackLayout ();
+ PopulateStack (stack2);
+ _stack.Children.Add (stack2);
+ }
+
+ Content = root;
+ }
+
+ void PopulateStack (StackLayout stack)
+ {
+ for (int i = 0; i < 100; i++) {
+
+ var newButton = new Button { Text = "Foo Bar", AutomationId =string.Format ("btn_{0}", i) };
+ if (i == 49)
+ newButton.Text = "the before";
+
+ if (i == 50) {
+ newButton.Text = "the scrollto button";
+ newButton.BackgroundColor = Color.Yellow;
+ newButton.TextColor = Color.Black;
+ _toNavigateTo = newButton;
+ }
+ if (i == 51)
+ newButton.Text = "the after";
+ if (i == 53) {
+ newButton.Text = "the make visible from start";
+ newButton.Clicked += async (object sender, EventArgs e) => {
+ await _scrollview.ScrollToAsync (_toNavigateTo, ScrollToPosition.MakeVisible, true);
+ };
+ }
+
+ _buttons.Add (newButton);
+ stack.Children.Add (newButton);
+ }
+
+ stack.Children.Add (new Button { Text = "Foo Bottom" });
+ }
+ }
+}