| File: Layout\GridExtensions.cs | Web Access |
| Project: src\src\Controls\src\Core\Controls.Core.csproj (Microsoft.Maui.Controls) |
#nullable disable using System; namespace Microsoft.Maui.Controls { public static class GridExtensions { /// <summary> /// Adds an <see cref="IView" /> to the <see cref="Grid"/> at the specified column and row with a row span of 1 and a column span of 1. /// </summary> /// <param name="grid">The <see cref="Grid"/> to which the <see cref="IView" /> will be added.</param> /// <param name="view">The <see cref="IView" /> to add.</param> /// <param name="column">The column in which to place the <see cref="IView" />.</param> /// <param name="row">The row in which to place the <see cref="IView" />.</param> /// <exception cref="ArgumentNullException">Thrown when <paramref name="view"/> is null.</exception> /// <exception cref="ArgumentOutOfRangeException"> /// Thrown when <paramref name="row"/> or <paramref name="column"/> are less than 0. /// </exception> /// <remarks>If the <see cref="Grid"/> does not have enough rows/columns to encompass the specified location, they will be added.</remarks> public static void Add(this Grid grid, IView view, int column = 0, int row = 0) { grid.AddWithSpan(view, row, column, 1, 1); } /// <summary> /// Adds an <see cref="IView" /> to the <see cref="Grid"/> at the specified row and column spans. /// </summary> /// <param name="grid">The <see cref="Grid"/> to which the <see cref="IView" /> will be added.</param> /// <param name="view">The <see cref="IView" /> to add.</param> /// <param name="left">The left edge of the column span. Must be greater than or equal to 0.</param> /// <param name="right">The right edge of the column span. Must be greater than left. The <see cref="IView" /> won't occupy this column, but will stop just before it.</param> /// <param name="top">The top edge of the row span. Must be greater than or equal to 0.</param> /// <param name="bottom">The bottom edge of the row span. Must be greater than top. The <see cref="IView" /> won't occupy this row, but will stop just before it.</param> /// <exception cref="ArgumentNullException">Thrown when <paramref name="view"/> is null.</exception> /// <exception cref="ArgumentOutOfRangeException"> /// Thrown when <paramref name="left"/> or <paramref name="top"/> are less than 0, <paramref name="bottom"/> is less than or equal to <paramref name="top"/>, /// or <paramref name="right"/> is less than or equal to <paramref name="left"/>. /// </exception> /// <remarks>If the <see cref="Grid"/> does not have enough rows/columns to encompass the specified spans, they will be added.</remarks> [Obsolete("This method is obsolete. Please use AddWithSpan(this Grid, IView, int, int, int, int) instead.")] public static void Add(this Grid grid, IView view, int left, int right, int top, int bottom) { grid.AddWithSpan(view, top, left, bottom - top, right - left); } /// <summary> /// Adds an <see cref="IView" /> to the the <see cref="Grid"/> at the specified row and column with the specified row and column spans. /// </summary> /// <param name="grid">The <see cref="Grid"/> to which the <see cref="IView" /> will be added.</param> /// <param name="view">The <see cref="IView" /> to add.</param> /// <param name="row">The top row in which to place the <see cref="IView" />. Defaults to 0.</param> /// <param name="column">The left column in which to place the <see cref="IView" />. Defaults to 0.</param> /// <param name="rowSpan">The number of rows the <see cref="IView" /> should span. Defaults to 1.</param> /// <param name="columnSpan">The number of columns the <see cref="IView" /> should span. Defaults to 1.</param> /// <exception cref="ArgumentNullException">Thrown when <paramref name="view"/> is null.</exception> /// <exception cref="ArgumentOutOfRangeException"> /// Thrown when <paramref name="row"/> or <paramref name="column"/> are less than 0, or <paramref name="rowSpan"/> or <paramref name="columnSpan"/> are less than 1. /// </exception> /// <remarks>If the <see cref="Grid"/> does not have enough rows/columns to encompass the specified spans, they will be added.</remarks> public static void AddWithSpan(this Grid grid, IView view, int row = 0, int column = 0, int rowSpan = 1, int columnSpan = 1) { if (view is null) throw new ArgumentNullException(nameof(view)); if (row < 0) throw new ArgumentOutOfRangeException(nameof(row)); if (column < 0) throw new ArgumentOutOfRangeException(nameof(column)); if (rowSpan < 1) throw new ArgumentOutOfRangeException(nameof(rowSpan)); if (columnSpan < 1) throw new ArgumentOutOfRangeException(nameof(columnSpan)); grid.Add(view); EnsureRows(grid, row + rowSpan); grid.SetRow(view, row); grid.SetRowSpan(view, rowSpan); EnsureColumns(grid, column + columnSpan); grid.SetColumn(view, column); grid.SetColumnSpan(view, columnSpan); } static void EnsureRows(Grid grid, int rows) { if (rows == 1) { return; } var count = grid.RowDefinitions.Count; for (int n = count; n < rows; n++) { grid.RowDefinitions.Add(new RowDefinition()); } } static void EnsureColumns(Grid grid, int columns) { if (columns == 1) { return; } var count = grid.ColumnDefinitions.Count; for (int n = count; n < columns; n++) { grid.ColumnDefinitions.Add(new ColumnDefinition()); } } } }