summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Controls/GalleryPages/TemplatedCarouselGallery.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Controls/GalleryPages/TemplatedCarouselGallery.cs')
-rw-r--r--Xamarin.Forms.Controls/GalleryPages/TemplatedCarouselGallery.cs114
1 files changed, 114 insertions, 0 deletions
diff --git a/Xamarin.Forms.Controls/GalleryPages/TemplatedCarouselGallery.cs b/Xamarin.Forms.Controls/GalleryPages/TemplatedCarouselGallery.cs
new file mode 100644
index 00000000..2d9cfe11
--- /dev/null
+++ b/Xamarin.Forms.Controls/GalleryPages/TemplatedCarouselGallery.cs
@@ -0,0 +1,114 @@
+using System;
+using System.Collections.ObjectModel;
+using System.Threading.Tasks;
+
+namespace Xamarin.Forms.Controls
+{
+ internal class TemplatedCarouselGallery
+ : CarouselPage
+ {
+ ObservableCollection<Item> _items;
+ int _count = 0;
+
+ public TemplatedCarouselGallery()
+ {
+ NavigationPage.SetHasNavigationBar (this, false);
+
+ _items = new ObservableCollection<Item> {
+ CreateItem(),
+ CreateItem(),
+ };
+
+ ItemsSource = _items;
+
+ ItemTemplate = new DataTemplate (() => {
+ var page = new ContentPage ();
+
+ page.Padding = new Thickness (0,30,0,0);
+ page.SetBinding (TitleProperty, "Title");
+
+ var layout = new StackLayout { Spacing = 0 };
+
+ var label = new Label();
+ label.SetBinding (Label.TextProperty, "Content");
+ layout.Children.Add (label);
+
+ var swipeHereLabel = new Label {
+ Text = "Swipe Here",
+ HeightRequest = 40
+ };
+
+ layout.Children.Add (swipeHereLabel);
+
+ var add = new Button ();
+ add.SetBinding (Button.TextProperty, "InsertTabText");
+ add.Clicked += (sender, args) => _items.Insert (_items.IndexOf ((Item)add.BindingContext) + 1, CreateItem());
+ layout.Children.Add (add);
+
+ var change = new Button ();
+ change.SetBinding (Button.TextProperty, "ChangeTitleText");
+ change.Clicked += (sender, args) => ((Item) change.BindingContext).Title = (new Random().Next().ToString());
+ layout.Children.Add (change);
+
+ var remove = new Button ();
+ remove.SetBinding (Button.TextProperty, "RemoveTabText");
+ remove.Clicked += (sender, args) => _items.Remove ((Item)remove.BindingContext);
+ layout.Children.Add (remove);
+
+ var reset = new Button ();
+ reset.SetBinding (Button.TextProperty, "ResetAllTabsText");
+ reset.Clicked += (sender, args) => {
+ _count = 0;
+ ItemsSource = _items = new ObservableCollection<Item> { CreateItem(), CreateItem() };
+ };
+ layout.Children.Add (reset);
+
+ var nextPage = new Button ();
+ nextPage.SetBinding (Button.TextProperty, "NextPageText");
+ nextPage.Clicked += (sender, args) => {
+ int index = _items.IndexOf ((Item) nextPage.BindingContext) + 1;
+ if (index == _items.Count)
+ index = 0;
+
+ SelectedItem = _items[index];
+ };
+ layout.Children.Add (nextPage);
+
+ var delayReset = new Button { Text = "Delayed reset" };
+ delayReset.SetBinding (Button.TextProperty, "DelayedResetText");
+ delayReset.Clicked += (sender, args) => {
+ ItemsSource = null;
+
+ Task.Delay (5000).ContinueWith (t => {
+ _count = 0;
+ ItemsSource = _items = new ObservableCollection<Item> { CreateItem(), CreateItem() };
+ }, TaskScheduler.FromCurrentSynchronizationContext());
+ };
+
+ layout.Children.Add (delayReset);
+
+ page.Content = new ScrollView {
+ Padding = new Thickness (60, 0),
+ Content = layout
+ };
+ return page;
+ });
+ }
+
+ Item CreateItem()
+ {
+ int x = _count++;
+ return new Item {
+ Title = "Page " + x,
+ Content = "Lorem ipsum dolor sit amet #" + x,
+ InsertTabText = "Insert Tab: " + x,
+ ChangeTitleText = "Change title: " + x,
+ MoveTabText = "Move Tab: " + x,
+ RemoveTabText = "Remove Tab: " + x,
+ ResetAllTabsText = "Reset all tabs: " + x,
+ NextPageText = "Next Page: " + x,
+ DelayedResetText = "Delayed reset: " + x
+ };
+ }
+ }
+}