private ColumnDefinitionCollection CreateColumnDefinitions() { var columnDefinitions = new ColumnDefinitionCollection(); if (this.HorizontalContentAlignment == ManneTableViewContentAlignment.Center) { columnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }); } foreach (var column in this.ItemsSource.First()) { columnDefinitions.Add(new ColumnDefinition { Width = GridLength.Auto }); } if (this.HorizontalContentAlignment == ManneTableViewContentAlignment.Center) { columnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }); } return(columnDefinitions); }
private Grid CreateGridWithMenu() { Grid grid = new Grid { HorizontalOptions = LayoutOptions.Fill, VerticalOptions = LayoutOptions.Fill, }; Grid.SetRow(grid, 1); ColumnDefinitionCollection cd = grid.ColumnDefinitions; cd.Add(MenuColumn); cd.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }); grid.Children.Add(CreateMenuStack()); ScrollView scroll = new ScrollView { Content = WorkPlace }; Grid.SetColumn(scroll, 1); grid.Children.Add(scroll); return(grid); }
private ColumnDefinitionCollection CreateColumnDefinitions() { var columnDefinitions = new ColumnDefinitionCollection(); if (this.VerticalContentAlignment == TemplatedGridContentAlignment.Center) { columnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }); } foreach (var row in this.ItemsSource) { columnDefinitions.Add(new ColumnDefinition { Width = GridLength.Auto }); } if (this.VerticalContentAlignment == TemplatedGridContentAlignment.Center) { columnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }); } return(columnDefinitions); }
//public static ImageSource DefaultCheckedImg1 { // get { // return DefaultCheckedImg; // } //} public CheckBox() { this.TapCmd = new Command(() => { this.Checked = !this.Checked; if (this.CheckChanged != null) { this.CheckChanged.Invoke(this, new EventArgs()); } if (this.CheckChangedCmd != null && this.CheckChangedCmd.CanExecute(this.Checked)) { this.CheckChangedCmd.Execute(this.Checked); } }); var cols = new ColumnDefinitionCollection(); cols.Add(new ColumnDefinition() { Width = GridLength.Auto }); cols.Add(new ColumnDefinition() { Width = GridLength.Auto }); this.Grid = new Grid() { ColumnDefinitions = cols, }; //绑定内部Tap 命令 TapBinder.SetCmd(this.Grid, this.TapCmd); this.Content = this.Grid; this.Label = new Label() { BindingContext = this, VerticalTextAlignment = TextAlignment.Center }; this.Label.SetBinding(Label.TextProperty, "Text"); this.Label.SetBinding(Label.IsVisibleProperty, "ShowLabel"); this.Label.SetValue(Grid.ColumnProperty, 1); this.Grid.Children.Add(this.Label); this.Icon = new Image() { WidthRequest = this.Size, HeightRequest = this.Size, Source = this.OffImg }; this.Icon.SetValue(Grid.ColumnProperty, 0); this.Grid.Children.Add(this.Icon); }
private void GenerateGrid() { for (int i = 0; i < 6; i++) { ColumnDefinitionCollection coldefs = ScheduleGrid.ColumnDefinitions; coldefs.Add(new ColumnDefinition()); } DateTime time = _start; for (int i = 0; i < _numintervals; i++) { RowDefinitionCollection rowdefs = ScheduleGrid.RowDefinitions; rowdefs.Add(new RowDefinition() { MaxHeight = _rowheight, MinHeight = _rowheight, }); Label TimeLabel = new Label() { Content = time.ToString("HH:mm"), }; Grid.SetRow(TimeLabel, i); Grid.SetColumn(TimeLabel, 0); ScheduleGrid.Children.Add(TimeLabel); time = time.Add(_interval); } DrawCourses(); }
public static void AddRange(this ColumnDefinitionCollection collection, IEnumerable <ColumnDefinition> columns) { foreach (var column in columns) { collection.Add(column); } }
public SchedulePage() { selectDate = DateTime.Now; Title = "Schedule"; isChangedMonth = true; // set Button beforeBtn.Clicked += BeforeBtn_Clicked; nextBtn.Clicked += NextBtn_Clicked; // set grid layout for calendar RowDefinitionCollection rowDef = new RowDefinitionCollection(); for (int i = 0; i < 6; i++) { rowDef.Add(new RowDefinition { Height = new GridLength(30, GridUnitType.Absolute) }); } ColumnDefinitionCollection colDef = new ColumnDefinitionCollection(); for (int i = 0; i < 7; i++) { colDef.Add(new ColumnDefinition { Width = new GridLength(20, GridUnitType.Star) }); } calenderGrid.RowDefinitions = rowDef; calenderGrid.ColumnDefinitions = colDef; }
public static void AddMultiple(this ColumnDefinitionCollection columnDefinitionCollection, params ColumnDefinition[] columnDefinitions) { foreach (var definition in columnDefinitions) { columnDefinitionCollection.Add(definition); } }
protected override void OnExecute(UIMessageContext ctx) { var req = ctx.Get <CreateGridRequest>(); if (req == null) { return; } var target = Surface[req.ParentId]; if (target == null) { return; } var attached = false; var rowCollection = new RowDefinitionCollection(); var colCollection = new ColumnDefinitionCollection(); for (var i = 0; i < req.Rows; i++) { var row = new RowDefinition(); rowCollection.Add(row); } for (var j = 0; j < req.Columns; j++) { var col = new ColumnDefinition(); colCollection.Add(col); } var view = new Grid { RowDefinitions = rowCollection, ColumnDefinitions = colCollection, ColumnSpacing = req.ColumnSpacing, RowSpacing = req.RowSpacing }; Thread.Invoke(() => { attached = Surface.SetParent(view, target); }); if (!attached) { return; } var pair = Surface[view.Id]; ctx.SetResponse <CreateWidgetResponse>(res => { res.Widget = pair.UIWidget; res.Parent = target.UIWidget; res.Suggest <GetVisualTreeRequest>(); }); }
public static ColumnDefinition AddColumn(this ColumnDefinitionCollection defn, double Width) { var coldef = new ColumnDefinition(); coldef.Width = new GridLength(Width); defn.Add(coldef); return(coldef); }
public static ColumnDefinition AddAutoColumn(this ColumnDefinitionCollection defn) { var coldef = new ColumnDefinition(); coldef.Width = GridLength.Auto; defn.Add(coldef); return(coldef); }
public static ColumnDefinition AddStarColumn(this ColumnDefinitionCollection defn, int NumberUnits = 1) { var coldef = new ColumnDefinition(); coldef.Width = new GridLength(NumberUnits, GridUnitType.Star); defn.Add(coldef); return(coldef); }
/// <summary> /// Clears the Collection and Creates n amount of new definitions /// </summary> /// <param name="collumns">The collection to refresh</param> /// <param name="n">the amount of collumns required</param> private static void ResetColumns(ColumnDefinitionCollection collumns, int n) { collumns.Clear(); for (int i = 0; i < n; i++) { collumns.Add(new ColumnDefinition()); } }
private void flipGrid(PlayerShip ship) { Grid GridToTurn = ((Grid)(ship.ImageToShow)); RowDefinitionCollection rdc = GridToTurn.RowDefinitions; ColumnDefinitionCollection cdc = GridToTurn.ColumnDefinitions; if (!IsHorizontal) { double temp = GridToTurn.Width; GridToTurn.Width = GridToTurn.Height; GridToTurn.Height = temp; foreach (RowDefinition rd in rdc) { ColumnDefinition cd = new ColumnDefinition(); cd.Width = new GridLength(10, GridUnitType.Star); cdc.Add(cd); } for (int i = 0; i < GridToTurn.Children.Count; i++) { Grid.SetColumn(GridToTurn.Children[i], i); Grid.SetRow(GridToTurn.Children[i], 0); } while (rdc.Count > 0) { rdc.RemoveAt(rdc.Count - 1); } } else { double temp = GridToTurn.Height; GridToTurn.Height = GridToTurn.Width; GridToTurn.Width = temp; foreach (ColumnDefinition cd in cdc) { RowDefinition rd = new RowDefinition(); rd.Height = new GridLength(10, GridUnitType.Star); rdc.Add(rd); } for (int i = 0; i < GridToTurn.Children.Count; i++) { Grid.SetRow(GridToTurn.Children[i], i); Grid.SetColumn(GridToTurn.Children[i], 0); } while (cdc.Count > 0) { cdc.RemoveAt(cdc.Count - 1); } } IsHorizontal = !IsHorizontal; }
private ColumnDefinitionCollection CreateColumnDefinitions(WLLViewModel vmContext) { var columnDefinitionCollection = new ColumnDefinitionCollection(); columnDefinitionCollection.Add(new ColumnDefinition { Width = ButtonGridColumnDefWidth }); return(columnDefinitionCollection); }
/// <summary> /// Adds the specified amount of columns as simple 'new ColumnDefinition()' with Width set to 'new GridLength(0, GridUnitType.Auto)' /// </summary> /// <param name="collection"></param> /// <param name="amount"></param> public static void AddAmount(this ColumnDefinitionCollection collection, int amount) { for (int i = 0; i < amount; i++) { collection.Add(new ColumnDefinition() { Width = new GridLength(0, GridUnitType.Auto) }); } }
private void GridColumnDefinitions() { ColumnDefinitions = new ColumnDefinitionCollection(); ColumnDefinition column = new ColumnDefinition() { Width = GridLength.Star }; ColumnDefinitions.Add(column); }
private void SetColumnDefinitions(ColumnDefinitionCollection coldefs, IEnumerable <GridLength> widths) { coldefs.Clear(); foreach (var item in widths) { coldefs.Add(new ColumnDefinition() { Width = item }); } }
public static void FixOrderDetailWidth(ColumnDefinitionCollection column) { if (IsNormalScreenSize()) { return; } column.RemoveAt(column.Count - 1); column.Add(new ColumnDefinition { Width = new GridLength(300) }); }
public static ColumnDefinitionCollection Columns(GridUnitType Unit, params double[] Widths) { ColumnDefinitionCollection Return = new ColumnDefinitionCollection(); foreach (int Width in Widths) { Return.Add(new ColumnDefinition { Width = new GridLength(Width, Unit) }); } return(Return); }
public static ColumnDefinitionCollection GenerateColumnDefinition(params GridLength[] definitions) { var columnDefinitionCollection = new ColumnDefinitionCollection(); foreach (var gridLength in definitions) { columnDefinitionCollection.Add(new ColumnDefinition { Width = gridLength }); } return(columnDefinitionCollection); }
private ColumnDefinitionCollection GetColumns(int count) { var columns = new ColumnDefinitionCollection(); for (int i = 0; i < count; i++) { columns.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }); } return(columns); }
/* * public static readonly BindableProperty LampProperty = * BindableProperty.Create(nameof(Lamp), typeof(string), typeof(PlayerEquipment), default(string), BindingMode.TwoWay); * public string Lamp * { * get * { * return (string)GetValue(LampProperty); * } * * set * { * SetValue(LampProperty, value); * } * } * * public static readonly BindableProperty PickProperty = * BindableProperty.Create(nameof(Pick), typeof(string), typeof(PlayerEquipment), default(string), BindingMode.TwoWay); * public string Pick * { * get * { * return (string)GetValue(PickProperty); * } * * set * { * SetValue(PickProperty, value); * } * } * * public static readonly BindableProperty TrolleyProperty = * BindableProperty.Create(nameof(Trolley), typeof(string), typeof(PlayerEquipment), default(string), BindingMode.TwoWay); * public string Trolley * { * get * { * return (string)GetValue(TrolleyProperty); * } * * set * { * SetValue(TrolleyProperty, value); * } * } */ protected override void OnPropertyChanged(string propertyName = null) { base.OnPropertyChanged(propertyName); if (propertyName == EquipmentListProperty.PropertyName) { var columnDefinitions = new ColumnDefinitionCollection(); for (int i = 0; i < EquipmentList.Count; i++) { columnDefinitions.Add(new ColumnDefinition { Width = new GridLength(41, GridUnitType.Absolute) }); } var rowDefinitions = new RowDefinitionCollection(); rowDefinitions.Add(new RowDefinition { Height = new GridLength(60, GridUnitType.Absolute) }); EquipmentGrid.ColumnDefinitions = columnDefinitions; EquipmentGrid.RowDefinitions = rowDefinitions; for (int i = 0; i < EquipmentList.Count; i++) { var tapGestureRecognizer = new TapGestureRecognizer(); tapGestureRecognizer.SetBinding(TapGestureRecognizer.CommandProperty, "SelectEquipment"); tapGestureRecognizer.CommandParameter = EquipmentList[i].Image; var image = new Image { Source = EquipmentList[i].Image, Aspect = Aspect.AspectFill, }; image.GestureRecognizers.Add(tapGestureRecognizer); EquipmentGrid.Children.Add(image, i, 0); } } /* * if (propertyName == LampProperty.PropertyName) * { * LampImage.Source = Lamp; * } * else if (propertyName == PickProperty.PropertyName) * { * PickImage.Source = Pick; * } * else if (propertyName == TrolleyProperty.PropertyName) * { * TrolleyImage.Source = Trolley; * }*/ }
public static Grid SetColumnDefinition(this Grid grid, params GridLength[] definitions) { var columnDefinitionCollection = new ColumnDefinitionCollection(); foreach (var gridLength in definitions) { columnDefinitionCollection.Add(new ColumnDefinition { Width = gridLength }); } grid.ColumnDefinitions = columnDefinitionCollection; return(grid); }
public static ColumnDefinitionCollection ColumnBuilder(params double[] values) { var result = new ColumnDefinitionCollection(); foreach (var value in values) { result.Add(new ColumnDefinition { Width = new GridLength(value, GridUnitType.Auto) }); } return(result); }
public static ColumnDefinitionCollection Define(params GridLength[] widths) { var columnDefinitions = new ColumnDefinitionCollection(); for (var i = 0; i < widths.Length; i++) { columnDefinitions.Add(new ColumnDefinition { Width = widths[i] }); } return(columnDefinitions); }
protected override void OnPropertyChanged(string propertyName = null) { base.OnPropertyChanged(propertyName); if (propertyName == HandCardsProperty.PropertyName && HandCards.Cards != null && HandCards.Cards.Count > 0) { var columnDefinitions = new ColumnDefinitionCollection(); columnDefinitions.Add(new ColumnDefinition { Width = new GridLength(100, GridUnitType.Absolute) }); for (int i = 0; i < HandCards.Cards.Count; i++) { columnDefinitions.Add(new ColumnDefinition { Width = new GridLength(35, GridUnitType.Absolute) }); } var rowDefinitions = new RowDefinitionCollection(); rowDefinitions.Add(new RowDefinition { Height = new GridLength(50, GridUnitType.Absolute) }); Hand.ColumnDefinitions = columnDefinitions; Hand.RowDefinitions = rowDefinitions; Hand.Children.Add(new Image { Source = HandCards.RoleImage }, 0, 0); for (int i = 1; i < HandCards.Cards.Count + 1; i++) { Hand.Children.Add(new Image { Source = HandCards.Cards[i - 1], Aspect = Aspect.AspectFill }, i, 0); } } }
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { var items = value as IEnumerable <HomeViewModel>; var collection = new ColumnDefinitionCollection(); foreach (var item in items) { collection.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star) }); } return(collection); }
protected override void OnPropertyChanged(string propertyName = null) { base.OnPropertyChanged(propertyName); if (propertyName == ImagesProperty.PropertyName && Images.Count > 0) { var rowDefinitions = new RowDefinitionCollection(); for (int i = 0; i < Images.Count; i++) { rowDefinitions.Add(new RowDefinition { Height = new GridLength(50, GridUnitType.Absolute) }); } var columnDefinitions = new ColumnDefinitionCollection(); for (int i = 0; i < Images[0].Count; i++) { columnDefinitions.Add(new ColumnDefinition { Width = new GridLength(35, GridUnitType.Absolute) }); } MapGrid.RowDefinitions = rowDefinitions; MapGrid.ColumnDefinitions = columnDefinitions; for (int x = 0; x < Images.Count; x++) { var row = Images[0]; for (int y = 0; y < row.Count; y++) { var tapGestureRecognizer = new TapGestureRecognizer(); tapGestureRecognizer.SetBinding(TapGestureRecognizer.CommandProperty, "SelectImage"); tapGestureRecognizer.CommandParameter = row[y].Image; var image = new Image { Source = row[y].Image, Aspect = Aspect.AspectFill, }; image.GestureRecognizers.Add(tapGestureRecognizer); MapGrid.Children.Add(image, y, x); } } } }
private void InitNewGrid(IList <IList <T> > gridElements, int spacing) { GridElements = gridElements; var rowDefinitions = new RowDefinitionCollection(); var columnDefinitions = new ColumnDefinitionCollection(); foreach (var column in gridElements) { if (column.Count > 0) { var columnDefinitionWidth = column.Last().WidthRequest; columnDefinitions.Add(new ColumnDefinition { Width = columnDefinitionWidth > 0 ? columnDefinitionWidth : new GridLength(1, GridUnitType.Star), }); } } foreach (var row in gridElements.First()) { rowDefinitions.Add(new RowDefinition { Height = GridLength.Auto }); } NewGrid = new Grid { RowDefinitions = rowDefinitions, ColumnDefinitions = columnDefinitions, VerticalOptions = LayoutOptions.FillAndExpand, HorizontalOptions = LayoutOptions.FillAndExpand, BackgroundColor = Color.FromHex("#cccccc"), ColumnSpacing = spacing, RowSpacing = spacing }; for (var index = 0; index < gridElements.Count; index++) { for (var i = 0; i < gridElements[index].Count; i++) { var element = gridElements[index][i]; NewGrid.Children.Add(element, index, i); } } }
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { var items = value as IEnumerable<MainContentChildViewModel>; var collection = new ColumnDefinitionCollection(); foreach (var item in items) { collection.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star) }); //collection.Add(item.ChildView); } return collection; }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { var items = value as IEnumerable<ICarouselViewModel>; var collection = new ColumnDefinitionCollection(); foreach (var item in items) { collection.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star) }); } return collection; }
/// <summary> /// Override this method to execute an action when the BindingContext changes. /// </summary> /// <remarks></remarks> protected override void OnBindingContextChanged() { base.OnBindingContextChanged(); var container = BindingContext as IList; if (container == null) return; FlowListView flowListView = null; if (_flowListViewRef.TryGetTarget(out flowListView) && flowListView != null) { _flowColumnTemplate = flowListView.FlowColumnTemplate; _desiredColumnCount = flowListView.DesiredColumnCount; _flowColumnExpand = flowListView.FlowColumnExpand; } // Getting view types from templates var containerCount = container.Count; IList<DataTemplate> templates = GetDataTemplates(container); bool layoutChanged = RowLayoutChanged(containerCount, templates); if (!layoutChanged) // REUSE VIEWS { if (_useGridAsMainRoot) { for (int i = 0; i < containerCount; i++) { SetBindingContextForView(_rootLayoutAuto.Children[i], container[i]); } } else { for (int i = 0; i < containerCount; i++) { SetBindingContextForView(_rootLayout.Children[i], container[i]); } } } else // RECREATE COLUMNS { if (_useGridAsMainRoot) { if (_rootLayoutAuto.Children.Count > 0) _rootLayoutAuto.Children.Clear(); } else { if (_rootLayout.Children.Count > 0) _rootLayout.Children.Clear(); } _currentColumnTemplates = new List<DataTemplate>(templates); if (_useGridAsMainRoot) { if (_rootLayoutAuto.Children.Count > 0) _rootLayoutAuto.Children.Clear(); var colDefs = new ColumnDefinitionCollection(); for (int i = 0; i < _desiredColumnCount; i++) { colDefs.Add(new ColumnDefinition() { Width = new GridLength(1d, GridUnitType.Star) }); } _rootLayoutAuto.ColumnDefinitions = colDefs; for (int i = 0; i < containerCount; i++) { var view = (View)templates[i].CreateContent(); view.GestureRecognizers.Add(new TapGestureRecognizer() { Command = new Command(async (obj) => { await ExecuteTapGestureRecognizer(view); }) }); SetBindingContextForView(view, container[i]); if (containerCount == 0 || _desiredColumnCount == 0) return; AddViewToLayoutAutoHeightEnabled(view, containerCount, i); } } else { if (_rootLayout.Children.Count > 0) _rootLayout.Children.Clear(); for (int i = 0; i < containerCount; i++) { var view = (View)templates[i].CreateContent(); view.GestureRecognizers.Add(new TapGestureRecognizer() { Command = new Command(async (obj) => { await ExecuteTapGestureRecognizer(view); }) }); SetBindingContextForView(view, container[i]); if (containerCount == 0 || _desiredColumnCount == 0) return; AddViewToLayoutAutoHeightDisabled(view, containerCount, i); } } } }
/// <summary> /// Handles the collection changed. /// </summary> /// <remarks> /// The bottom could only have one sort of buttons: text or icons. /// If there are more buttons with text than the bottom could hold, than the overflow menu is shown. /// </remarks> /// <param name="sender">Sender of event.</param> /// <param name="e">Collection changed event arguments.</param> private void HandleCollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { BottomLayout.Children.Clear(); var textLayout = new StackLayout() { Orientation = StackOrientation.Horizontal, HorizontalOptions = LayoutOptions.Fill, }; foreach (ToolButton t in buttons) { if (t is ToolTextButton) { var button = new ExtendedButton() { Text = (t is ToolTextButton) ? ((ToolTextButton)t).Text : null, TextColor = App.Colors.Tint, Image = null, HorizontalOptions = LayoutOptions.FillAndExpand, BackgroundColor = Color.Transparent, Command = new Command((parameter) => KeyClick(t.Command, parameter)), CommandParameter = (t is ToolTextButton) ? ((ToolTextButton)t).Text : null, #if __IOS__ Font = Font.SystemFontOfSize(20), #endif IsVisible = t.IsVisibleAtStartup, }; // Save for later use t.Button = button; // If only one text button, than add to stack layout if (buttons.Count <= 1) { BottomLayout.Children.Add(button); } else { textLayout.Children.Add(button); } } if (t is ToolIconButton) { var button = new ExtendedButton() { Text = (t is ToolTextButton) ? ((ToolTextButton)t).Text : null, TextColor = App.Colors.Tint, Image = (t is ToolIconButton) ? ((ToolIconButton)t).Icon : null, HorizontalOptions = Device.OnPlatform<LayoutOptions>(LayoutOptions.FillAndExpand, LayoutOptions.CenterAndExpand, LayoutOptions.FillAndExpand), BackgroundColor = Color.Transparent, Command = new Command((parameter) => KeyClick(t.Command, parameter)), CommandParameter = (t is ToolIconButton) ? ((ToolIconButton)t).Icon : null, IsVisible = t.IsVisibleAtStartup, }; // Save for later use t.Button = button; BottomLayout.Children.Add(button); } } if (buttons.Count == 0 || buttons[0] is ToolIconButton) { // If the first button is an icon, than we are ready return; } Thickness padding = new Thickness(10, 0); double spacing = 6; // Get max size of bottom var maxWidth = (BottomLayout.Width == -1 ? DependencyService.Get<IScreen>().Width : BottomLayout.Width) - padding.Left - padding.Right; if (buttons.Count == 1) { // We only have one button, so set width to maximum width BottomLayout.Padding = padding; buttons[0].Button.WidthRequest = BottomLayout.Width - padding.Left - padding.Right; if (((ToolTextButton)buttons[0]).TextWidth > maxWidth) { // Text is wider than maxWidth, so scale font var fontSize = ((ToolTextButton)buttons[0]).Button.FontSize * maxWidth / ((ToolTextButton)buttons[0]).TextWidth - 1; ((ToolTextButton)buttons[0]).Button.FontSize = fontSize > 14 ? fontSize : 14; } return; } // So, now we know, that we have more than one text button. // Check, if all buttons fit into the bottom grid. double sumWidth = 0; // Get width of all buttons for (int i = 0; i < buttons.Count; i++) { sumWidth += ((ToolTextButton)buttons[i]).TextWidth; } // Add spacing between sumWidth += spacing * (buttons.Count - 1); // Now check, if all buttons want fit into the bottom line if (sumWidth > maxWidth) { // No. There are more buttons than space, so create an extra menu // Create button for extra menu var button = new ExtendedButton() { Text = OverflowMenuText, TextColor = App.Colors.Tint, Image = null, HorizontalOptions = LayoutOptions.FillAndExpand, BackgroundColor = Color.Transparent, Command = new Command(HandleOverflowMenuClick), #if __IOS__ Font = Font.SystemFontOfSize(20), #endif }; BottomLayout.Children.Add(button); } else { // Yes. All buttons should fit into the bottom line. // Create grid for buttons Grid grid = new Grid() { VerticalOptions = LayoutOptions.FillAndExpand, HorizontalOptions = LayoutOptions.FillAndExpand, RowDefinitions = { new RowDefinition { Height = GridLength.Auto }, }, ColumnSpacing = 0, //spacing, }; // Create columns for buttons var colDefs = new ColumnDefinitionCollection(); colDefs.Add(new ColumnDefinition { Width = new GridLength(((ToolTextButton)buttons[0]).TextWidth, GridUnitType.Absolute) }); // Set layout of first button buttons[0].Button.HorizontalOptions = LayoutOptions.StartAndExpand; // Set width (autosize) and layout of all buttons between first and last for (int i = 1; i < buttons.Count - 1; i++) { colDefs.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }); //((ToolTextButton)buttons[i]).TextWidth + padding.Left + padding.Right, GridUnitType.Absolute) }); buttons[i].Button.HorizontalOptions = LayoutOptions.CenterAndExpand; } if (buttons.Count == 2) { // If we only have two buttons, than add an empty col with autosize width colDefs.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }); // Width = GridLength.Auto }); // colDefs.Add(new ColumnDefinition { Width = new GridLength(((ToolTextButton)buttons[buttons.Count-1]).TextWidth, GridUnitType.Absolute) }); // Width = GridLength.Auto }); // buttons[buttons.Count-1].Button.HorizontalOptions = LayoutOptions.EndAndExpand; } else { // If we have more than 2 buttons, than set width to real size of button colDefs.Add(new ColumnDefinition { Width = new GridLength(((ToolTextButton)buttons[buttons.Count-1]).TextWidth, GridUnitType.Absolute) }); // Width = GridLength.Auto }); // buttons[buttons.Count-1].Button.HorizontalOptions = LayoutOptions.EndAndExpand; } // Set column definitions for the buttons grid.ColumnDefinitions = colDefs; // Add all buttons to the grid var index = 0; for (int i = 0; i < buttons.Count; i++) { if (buttons.Count == 2 && i == 1) { // Add empty col index++; } // grid.Children.Add(new BoxView() { BackgroundColor = Color.FromRgb(i * 64, i * 64, i * 64), }, i + index, 0); grid.Children.Add(buttons[i].Button, i + index, 0); } // Add grid to BottomLayout BottomLayout.Padding = padding; BottomLayout.Children.Add(grid); } }
private ColumnDefinitionCollection CreateColumnDefinitions() { var columnDefinitions = new ColumnDefinitionCollection(); if(this.HorizontalContentAlignment == TemplatedTableViewContentAlignment.Center) { columnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }); } foreach(var column in this.ItemsSource) { columnDefinitions.Add(new ColumnDefinition { Width = GridLength.Auto }); } if(this.HorizontalContentAlignment == TemplatedTableViewContentAlignment.Center) { columnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }); } return columnDefinitions; }