Ich baue ein Raster in Xamarin.Forms. Und ich möchte Rahmen wie Tabellen hinzufügen. Ich dachte, ich könnte den Rand beim Definieren von Zeilen und Spalten hinzufügen, aber es ist fehlgeschlagen. Kann mir jemand helfen? Das ist mein aktueller Code.
Grid grid = new Grid {
VerticalOptions = LayoutOptions.FillAndExpand,
RowDefinitions = {
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
},
ColumnDefinitions = {
new ColumnDefinition { Width = new GridLength (1, GridUnitType.Star) },
new ColumnDefinition { Width = new GridLength (5, GridUnitType.Star) },
new ColumnDefinition { Width = new GridLength (1, GridUnitType.Star) },
}
};
Es gibt keine Border
-Eigenschaft für GridView
, aber:
Setze einfach grid.BackgroundColor
auf den gewünschten Randfarbenwert und dann grid.ColumnSpacing
und grid.RowSpacing
auf einen bestimmten Wert und stellen Sie sicher, dass für alle Steuerelemente, die Sie zum Raster hinzufügen, ein eigenes BackgroundColor
richtig eingestellt ist.
Hier ist die vollständige Antwort (in XAML), ohne dass Sie einen benutzerdefinierten Renderer oder Effekt schreiben müssen.
Der Code ist wenig ausführlich, aber leicht zu verstehen und das Ergebnis ist wie auf dem Bild
Hier ist der Code, mit dem Sie die Rahmen in Ihr Raster einfügen können.
<Grid BackgroundColor="White">
<Grid.RowDefinitions>
<RowDefinition Height="1"/>
<RowDefinition Height="15"/>
<RowDefinition Height="1"/>
<RowDefinition Height="15"/>
<RowDefinition Height="1"/>
<RowDefinition Height="15"/>
<RowDefinition Height="1"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="1" />
<ColumnDefinition Width="10" />
<ColumnDefinition Width="1" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="1" />
<ColumnDefinition Width="50" />
<ColumnDefinition Width="1" />
</Grid.ColumnDefinitions>
<BoxView Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="8" BackgroundColor="Red" HeightRequest="1" VerticalOptions="End" HorizontalOptions="FillAndExpand"/>
<!--Your stuff here!-->
<BoxView Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="8" BackgroundColor="Red" HeightRequest="1" VerticalOptions="End" HorizontalOptions="FillAndExpand"/>
<!--Your stuff here!-->
<BoxView Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="8" BackgroundColor="Red" HeightRequest="1" VerticalOptions="End" HorizontalOptions="FillAndExpand"/>
<!--Your stuff here!-->
<BoxView Grid.Row="6" Grid.Column="0" Grid.ColumnSpan="8" BackgroundColor="Red" HeightRequest="1" VerticalOptions="End" HorizontalOptions="FillAndExpand"/>
<!--Vertical lines and no "stuff"-->
<BoxView Grid.Column="1" Grid.Row="0" Grid.RowSpan="7" BackgroundColor="Blue" WidthRequest="1" VerticalOptions="FillAndExpand" HorizontalOptions="End"/>
<BoxView Grid.Column="3" Grid.Row="0" Grid.RowSpan="7" BackgroundColor="Blue" WidthRequest="1" VerticalOptions="FillAndExpand" HorizontalOptions="End"/>
<BoxView Grid.Column="5" Grid.Row="0" Grid.RowSpan="7" BackgroundColor="Blue" WidthRequest="1" VerticalOptions="FillAndExpand" HorizontalOptions="End"/>
<BoxView Grid.Column="7" Grid.Row="0" Grid.RowSpan="7" BackgroundColor="Blue" WidthRequest="1" VerticalOptions="FillAndExpand" HorizontalOptions="End"/>
</Grid>
Ich habe gerade bemerkt, dass mein Beispiel Sturlas ähnlich ist, aber ein bisschen anders, also lasse ich es hier.
Der Code ist nicht besonders hübsch, aber ich habe etwas Ähnliches getan, indem ich 1px BoxView
zwischen jede Spalte und dann 1 oben auf Ihrem Grid
und einen unten auf Ihrem Grid
eingefügt habe. , wie so:
<Grid VerticalOptions="FillAndExpand"
HorizontalOptions="FillAndExpand"
RowSpacing="0"
ColumnSpacing="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="1"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="1"/>
</Grid.RowDefinitions>
<BoxView BackgroundColor="Black"
HeightRequest="1"
HorizontalOptions="FillAndExpand"
Grid.Row="0"/>
<Grid VerticalOptions="Start"
ColumnSpacing="0"
Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="1"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Button Text="Button 1"/>
<BoxView BackgroundColor="Black"
WidthRequest="1"
VerticalOptions="FillAndExpand"
Grid.Column="1"/>
<Button Text="Button 1"
Grid.Column="2"/>
</Grid>
<BoxView BackgroundColor="Black"
HeightRequest="1"
HorizontalOptions="FillAndExpand"
Grid.Row="2"/>
</Grid>
* Bearbeiten: Seit ich das schreibe, habe ich die Art und Weise, wie ich es mache, ein wenig geändert. Nun setze ich wie Daniel Luberdas Antwort einfach den Grid.BackgroundColor
Auf Color.Black
Und dann kann ich alle BoxView
s entfernen und bin fertig. Ich mache das, weil ich annehme, dass es viel besser ist, wenige Ansichten auf dem Bildschirm zu haben, besonders wenn Sie so etwas wie das oben genannte in ein ListView
einfügen.
Da viele meiner Seiten die Button
s animieren, wenn die Seite geladen wird (mithilfe von ScaleTo()
), habe ich außerdem zunächst Grid.BackgroundColor
Auf Color.Transparent
Oder Color.White
Und wenn die Animation fertig ist, ändere ich sie auf Color.Black
. Hat bisher ziemlich gut funktioniert.
Wenn Sie eine Lösung mit mehr gleichen Grenzen als Daniel Luberdas Antwort wünschen, habe ich Folgendes verwendet:
Erstellen Sie ein Raster, in dem das Element Rahmen haben soll. Setzen Sie den Abstand zwischen Spalten und Zeilen auf 0. Erstellen Sie für jedes Element des Rasters ein anderes Raster mit einer Boxansicht und Ihrer Ansicht über dieser Boxansicht. Setzen Sie dann jede BoxView zum Füllen und Erweitern ein. Passen Sie dann die Polsterung dieser "unter" -Gitter an, wie Sie möchten. Jedes Element Ihres Gitters wird gleichermaßen getrennt.
Das ist allerdings ziemlich schwer.