2015-03-04 16 views
7

Czy jest ktoś, kto może mi wyjaśnić, w jaki sposób wielkość i rozpiętość kolumn w Xamarin Forms? Parametry prawo, lewo, góra, dół są nieco mylące.RowSpan i ColumnSpan w Xamarin Forms

Pozwala wykorzystać ten fragment kodu dla 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); 

Jakie numery 2, 3, 1, 3 znaczy pod względem kolumn i wierszy tutaj? Dotyczy siatki o czterech rzędach i trzech kolumnach.

Odpowiedz

14

Ta odpowiedź jest kopiowana i wklejana od this answer at Xamarin's forums przez Tilla Balandata, ale jest przydatna, ponieważ dokumentacja Xamarina nie wyjaśnia dodatkowych parametrów metody Dodaj.

Przeciążenie na dodać, że trwa 4 parametrów jest trochę mylące, ale w końcu pozwala zdefiniować rzędu, rowspan, kolumna i Columnspan: więc powyższy przykład

var label = new Label { Text = "Row 1" }; 
myGrid.Children.Add(label,0,0); 
Grid.SetColumnSpan(label,2); 

przekłada się:

var label = new Label { Text = "Row 1" }; 
myGrid.Children.Add(label, 0, 2, 0, 1); 

to co Xamarin robi wewnętrznie:

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

więc może być bardziej komfortowo z czymś takim:

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

Uwaga: (To właśnie zajęło mi pół godziny) - Ustawianie ColumnSpan na coś heighter niż 1 nie działa, jeżeli siatka ma RowDefinitions, nawet na siatka z pojedynczą linią ... (przynajmniej w aplikacji UWP Xamarin Forms) – Markus

Powiązane problemy