diff options
Diffstat (limited to 'Xamarin.Forms.Controls/GalleryPages/UnevenListGallery.cs')
-rw-r--r-- | Xamarin.Forms.Controls/GalleryPages/UnevenListGallery.cs | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/Xamarin.Forms.Controls/GalleryPages/UnevenListGallery.cs b/Xamarin.Forms.Controls/GalleryPages/UnevenListGallery.cs new file mode 100644 index 00000000..1c8b16c4 --- /dev/null +++ b/Xamarin.Forms.Controls/GalleryPages/UnevenListGallery.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Xamarin.Forms.Controls +{ + public class UnevenListGallery : ContentPage + { + public UnevenListGallery () + { + Padding = new Thickness (0, 20, 0, 0); + + var list = new ListView { + HasUnevenRows = true + }; + + bool next = true; + list.ItemTemplate = new DataTemplate (() => { + bool tall = next; + next = !next; + + var cell = new TextCell { + Height = (tall) ? 88 : 44 + }; + + cell.SetBinding (TextCell.TextProperty, "."); + return cell; + }); + + list.ItemsSource = new[] { "Tall", "Short", "Tall", "Short" }; + + var listViewCellDynamicHeight = new ListView { + HasUnevenRows = true, + AutomationId= "unevenCellListGalleryDynamic" + }; + + listViewCellDynamicHeight.ItemsSource = new [] { + @"That Flesh is heir to? 'Tis a consummation +Devoutly to be wished. To die, to sleep, +To sleep, perchance to Dream; Aye, there's the rub, +For in that sleep of death, what dreams may come,That Flesh is heir to? 'Tis a consummation +Devoutly to be wished. To die, to sleep, +To sleep, perchance to Dream; Aye, there's the rub, +For in that sleep of death, what dreams may come", + }; + + listViewCellDynamicHeight.ItemTemplate = new DataTemplate (typeof(UnevenRowsCell)); + + listViewCellDynamicHeight.ItemTapped += (sender, e) => { + if (e == null) + return; // has been set to null, do not 'process' tapped event + ((ListView)sender).SelectedItem = null; // de-select the row + }; + + var grd = new Grid (); + + grd.RowDefinitions.Add (new RowDefinition ()); + grd.RowDefinitions.Add (new RowDefinition ()); + + grd.Children.Add (listViewCellDynamicHeight); + grd.Children.Add (list); + + Grid.SetRow (list, 1); + + Content = grd; + } + + public class UnevenRowsCell : ViewCell + { + public UnevenRowsCell () + { + var label1 = new Label { + Text = "Label 1", + FontSize = Device.GetNamedSize (NamedSize.Small, typeof(Label)) + }; + label1.SetBinding (Label.TextProperty, new Binding (".")); + + View = new StackLayout { + Orientation = StackOrientation.Vertical, + VerticalOptions = LayoutOptions.StartAndExpand, + Padding = new Thickness (15, 5, 5, 5), + Children = { label1 } + }; + } + // This is the code used before and still works by setting the height of the cell + // const int avgCharsInRow = 35; + // const int defaultHeight = 44; + // const int extraLineHeight = 20; + // protected override void OnBindingContextChanged () + // { + // base.OnBindingContextChanged (); + // + // if (Device.OS == TargetPlatform.iOS) { + // var text = (string)BindingContext; + // + // var len = text.Length; + // + // if (len < (avgCharsInRow * 2)) { + // // fits in one cell + // Height = defaultHeight; + // } else { + // len = len - (avgCharsInRow * 2); + // var extraRows = len / 35; + // Height = defaultHeight + extraRows * extraLineHeight; + // } + // } + // } + } + } +} |