Câu trả lời này được sao chép và dán từ this answer at Xamarin's forums bởi Till Balandat, nhưng rất hữu ích ở đây vì tài liệu của Xamarin dường như không giải thích các tham số bổ sung cho phương thức Thêm.
Các tình trạng quá tải cho Add rằng mất 4 thông số là một chút bối rối, nhưng cuối cùng cho phép bạn xác định Row, rowspan, Cột và Columnspan: Vì vậy, ví dụ trên
var label = new Label { Text = "Row 1" };
myGrid.Children.Add(label,0,0);
Grid.SetColumnSpan(label,2);
dịch để:
var label = new Label { Text = "Row 1" };
myGrid.Children.Add(label, 0, 2, 0, 1);
Đây là những gì Xamarin làm nội bộ:
public void Add(View view, int left, int right, int top, int bottom)
{
//..exceptionhandling removed
Grid.SetRow((BindableObject) view, top);
Grid.SetRowSpan((BindableObject) view, bottom - top);
Grid.SetColumn((BindableObject) view, left);
Grid.SetColumnSpan((BindableObject) view, right - left);
this.Add(view);
}
Vì vậy, bạn có thể thoải mái hơn với những thứ như sau:
public static class GridExtension
{
public static void AddChild(this Grid grid, View view, int row, int column, int rowspan = 1, int columnspan = 1)
{
if (row < 0)
throw new ArgumentOutOfRangeException("row");
if (column < 0)
throw new ArgumentOutOfRangeException("column");
if (rowspan <= 0)
throw new ArgumentOutOfRangeException("rowspan");
if (columnspan <= 0)
throw new ArgumentOutOfRangeException("columnspan");
if (view == null)
throw new ArgumentNullException("view");
Grid.SetRow((BindableObject)view, row);
Grid.SetRowSpan((BindableObject) view, rowspan);
Grid.SetColumn((BindableObject) view, column);
Grid.SetColumnSpan((BindableObject) view, columnspan);
grid.Children.Add(view);
}
}
Lưu ý: một lưới đường đơn ... (Ít nhất trong một biểu mẫu Xamarin UWP App) – Markus