2015-03-04 40 views
7

Có ai ở ngoài đó có thể giải thích cho tôi về cách hàng và cột trong các hình thức Xamarin không? Các thông số bên phải, trái, trên, dưới là một chút bối rối.RowSpan và ColumnSpan ở dạng Xamarin

Cho phép sử dụng đoạn mã này cho rowspan:

   grid.Children.Add(new Label 
      { 
       Text = "Span two rows (or more if you want)", 
       TextColor = Color.Yellow, 
       BackgroundColor = Color.Navy, 
       XAlign = TextAlignment.Center, 
       YAlign = TextAlignment.Center 
      }, 2, 3, 1, 3); 

nào số 2, 3, 1, 3 có ý nghĩa gì về mặt cột và các hàng ở đây? Đây là một lưới có bốn hàng và ba cột.

Trả lời

14

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);  
    } 
} 
+1

Lưu ý: một lưới đường đơn ... (Ít nhất trong một biểu mẫu Xamarin UWP App) – Markus

Các vấn đề liên quan