2015-03-04 4 views
7

Gibt es jemanden da draußen, der mir erklären kann, wie Rowspan und Columnspan in Xamarin Forms? Die Parameter rechts, links, oben, unten sind ein wenig verwirrend.RowSpan und ColumnSpan in Xamarin Forms

Hier können diesen Code-Snippet für rowspan verwenden:

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

Was bedeutet die Zahlen 2, 3, 1, 3 bedeutet in Bezug auf die Spalten und Zeilen hier? Dies ist für ein Raster mit vier Zeilen und drei Spalten.

Antwort

14

Diese Antwort wird kopiert und eingefügt von this answer at Xamarin's forums von Till Balandat, ist aber hier nützlich, da Xamarins Dokumentation die zusätzlichen Parameter der Add-Methode nicht zu erklären scheint.

Die Überlastung für hinzufügen, die 4 Parameter nimmt, ist ein wenig verwirrend, aber am Ende können Sie definieren, Reihe, RowSpan, Säule und Column: So das obige Beispiel

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

übersetzt:

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

ist, was Xamarin tut intern:

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

So könnte man mit so etwas wie dies bequemer sein:

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

Anmerkung: (Es ist mir nur eine halbe Stunde dauerte) - Einstellung der Column etwas heighter als 1 funktioniert nicht, wenn ein Grid keine RowDefinitions hat, auch auf ein einzelnes Linienraster ... (Zumindest in einer Xamarin Forms UWP App) – Markus