/// <summary> /// Gets row definition for the specified view. /// </summary> private RowDefinition GetRowDefinition(UIView child) { var cellIndex = Cell.GetValue(child); int rowIndex = cellIndex.Row < Rows.Count ? cellIndex.Row : Rows.Count - 1; var rowDefinition = Rows[rowIndex]; var cellSpan = CellSpan.GetValue(child); if (cellSpan == null || cellSpan.Row <= 1) { return(rowDefinition); } var rowSpacing = RowSpacing ?? (Spacing ?? ElementSize.Default); // calculate new row definition based on row span var spannedRowDefinition = new RowDefinition(rowDefinition); for (int i = 1; i < cellSpan.Row; ++i) { int nextRowIndex = rowIndex + i; if (nextRowIndex >= Rows.Count) { break; } var nextRowDefinition = Rows[nextRowIndex]; // add actual width and spacing of next row spannedRowDefinition.ActualHeight += nextRowDefinition.ActualHeight + rowSpacing; } return(spannedRowDefinition); }
/// <summary> /// Gets column definition for the specified view. /// </summary> private ColumnDefinition GetColumnDefinition(UIView child) { var cellIndex = Cell.GetValue(child); int columnIndex = cellIndex.Column < Columns.Count ? cellIndex.Column : Columns.Count - 1; var columnDefinition = Columns[columnIndex]; var cellSpan = CellSpan.GetValue(child); if (cellSpan == null || cellSpan.Column <= 1) { return(columnDefinition); } var columnSpacing = ColumnSpacing ?? (Spacing ?? ElementSize.Default); // calculate new column definition based on column span var spannedColumnDefinition = new ColumnDefinition(columnDefinition); for (int i = 1; i < cellSpan.Column; ++i) { int nextColumnIndex = columnIndex + i; if (nextColumnIndex >= Columns.Count) { break; } var nextColumnDefinition = Columns[nextColumnIndex]; // add actual width and spacing of next column spannedColumnDefinition.ActualWidth += nextColumnDefinition.ActualWidth + columnSpacing; } return(spannedColumnDefinition); }