Extensões de grade
As extensões de Grid
fornecem uma série de métodos de extensão que dão suporte à configuração de Grid
.
Definir linhas + colunas
Para definir linhas e colunas para Grid
, CommunityToolkit.Maui.Markup
fornece dois métodos auxiliares:
Columns.Define
Rows.Define
Para aproveitar esses métodos auxiliares, primeiro adicionamos a seguinte diretiva using static
à parte superior da classe:
using static CommunityToolkit.Maui.Markup.GridRowsColumns;
Depois de adicionar a diretiva using static
acima, é possível definir os tamanhos de linha + coluna usando os seguintes valores para definir o GridLength
:
Microsoft.Maui.GridLength | XAML | CommunityToolkit.Maui.Markup.GridRowsColumns |
---|---|---|
GridLength.Auto |
Auto |
Auto |
GridLength.Star |
* |
Star |
new GridLength(2, GridLength.Star) |
2* |
Stars(2) |
new GridLength(20, GridLength.Absolute) |
20 |
20 |
Juntando tudo, agora é possível definir linhas + colunas de uma grade:
new Grid
{
ColumnDefinitions = Columns.Define(30, Star, Stars(2)),
RowDefinitions = Rows.Define(Auto, Star),
};
Exemplo
O exemplo a seguir demonstra como criar Grid
com duas linhas:
- Tamanho da linha 0:
GridLength.Auto
- Tamanho da linha 1:
GridLength.Star
O exemplo a seguir demonstra como criar Grid
com três colunas:
- Tamanho da coluna 0:
new GridLength(30, GridLength.Absolute)
- Tamanho da coluna 1:
GridLength.Star
- Tamanho da coluna 2:
new GridLength(GridLength.Star, 2)
:
// Add this using static to enable Columns.Define and Rows.Define
using static CommunityToolkit.Maui.Markup.GridRowsColumns;
// ...
new Grid
{
ColumnDefinitions = Columns.Define(30, Star, Stars(2)),
RowDefinitions = Rows.Define(Auto, Star),
Children =
{
new Label()
.Text("This Label is in Row 0 Column 0")
.Row(0).Column(0)
new Label()
.Text("This Label is in Row 0 Column 1")
.Row(0).Column(1)
new Label()
.Text("This Label is in Row 0 Column 2")
.Row(1).Column(2)
new Label()
.Text("This Label is in Row 1 Column 0")
.Row(1).Column(0)
new Label()
.Text("This Label is in Row 1 Column 1")
.Row(1).Column(1)
new Label()
.Text("This Label is in Row 1 Column 2")
.Row(1).Column(2)
}
}
Definir linhas + colunas usando enumerações
Também é possível definir e nomear linhas e colunas criando um Enum
personalizado. Usar um Enum
permite definir um nome para cada linha e coluna, facilitando a colocação dos controles em Grid
.
Exemplo
O exemplo a seguir demonstra como definir linhas + colunas para Grid
usando dois Enum
s.
Para aproveitar esses métodos auxiliares, adicione a seguinte diretiva using static
:
using static CommunityToolkit.Maui.Markup.GridRowsColumns;
Em seguida, defina os nomes das linhas e colunas criando um Enum
personalizado para cada uma:
enum Row { Username, Password, Submit }
enum Column { Description, UserInput }
Em seguida, preencha Grid
usando esses Enum
s para definir as linhas + colunas e atribuir cada controle a uma linha + coluna adequadamente:
using static CommunityToolkit.Maui.Markup.GridRowsColumns;
class LoginPage : ContentPage
{
public LoginPage()
{
Content = new Grid
{
RowDefinitions = Rows.Define(
(Row.Username, 30),
(Row.Password, 30),
(Row.Submit, Star)),
ColumnDefinitions = Columns.Define(
(Column.Description, Star),
(Column.UserInput, Star)),
Children =
{
new Label()
.Text("Username")
.Row(Row.Username).Column(Column.Description),
new Entry()
.Placeholder("Username")
.Row(Row.Username).Column(Column.UserInput),
new Label()
.Text("Password")
.Row(Row.Password).Column(Column.Description),
new Entry { IsPassword = true }
.Placeholder("Password")
.Row(Row.Password).Column(Column.UserInput),
new Button()
.Text("Submit")
.Row(Row.Password).RowSpan(All<Column>())
}
}
}
enum Row { Username, Password, Submit }
enum Column { Description, UserInput }
}
Linha
O método Row
define Grid.RowProperty
e Grid.RowSpanProperty
em BindableObject
.
O exemplo a seguir define Grid.RowProperty
de Button
como 0
e seu Grid.RowSpanProperty
como 2
, em seguida, define Grid.RowProperty
de Label
como 1
:
new Grid
{
Children =
{
new Button()
.Text("This Button is in Row 0 and spans 2 Columns")
.Row(0, 2),
new Label()
.Text("This Label is in Row 1 and does not span multiple columns")
.Row(1)
}
};
Coluna
O método Column
define Grid.ColumnProperty
e Grid.ColumnSpanProperty
em BindableObject
.
O exemplo a seguir define Grid.ColumnProperty
de Button
como 0
e seu Grid.ColumnSpanProperty
como 2
, em seguida, define Grid.ColumnProperty
de um Label
como 1
:
new Grid
{
Children =
{
new Button()
.Text("This Button is in Row 0 and spans 2 Columns")
.Column(0, 2),
new Label()
.Text("This Label is in Row 1 and does not span multiple columns")
.Column(1)
}
};
RowSpan
O método RowSpan
permite definir por quantas linhas de grade um controle se estenderá. Ou seja, Se Grid
tiver três linhas, .RowSpan(3)
garantirá que o controle se estenda pelas três colunas.
Aqui está um exemplo de Button
que se estende verticalmente por três linhas:
new Button()
.Text("This Button Spans Across 3 Grid Rows")
.RowSpan(3)
Todos<TEnum>
Ao definir as linhas usando Enum
, é possível usar All<TEnum>()
para garantir que o controle se estenda verticalmente por todas as linhas:
enum Row { Username, Password, Submit }
// ...
new Button()
.Text("This Button Spans Vertically Across Every Row Defined in our Enum")
.RowSpan(All<Row>());
ColumnSpan
O método ColumnSpan
permite definir por quantas colunas de grade um controle se estenderá. Ou seja, Se Grid
tiver três colunas, .ColumnSpan(3)
garantirá que o controle se estenda pelas três colunas.
Aqui está um exemplo de Button
que se estende horizontalmente por três colunas:
new Button()
.Text("This Button Spans Across 3 Grid Columns")
.ColumnSpan(3)
Todos<TEnum>
Ao definir as linhas usando Enum
, é possível usar All<TEnum>()
para garantir que o controle se estenda horizontalmente por todas as colunas:
enum Column { Description, UserInput }
// ...
new Button()
.Text("This Button Spans Vertically Across Every Row Defined in our Enum")
.ColumnSpan(All<Column>());
Último<TEnum>
Ao definir as linhas e colunas usando Enum
, é possível garantir que o controle seja adicionado à última linha ou à última coluna usando .Last<TEnum>()
.
Este exemplo demonstra como adicionar Button
à linha e coluna finais em Grid
enum Row { Username, Password, Submit }
enum Column { Description, UserInput }
// ...
new Button()
.Text("This Button Spans Vertically Across Every Row Defined in our Enum")
.Row(Last<Row>()).Column(Last<Column>());
.NET MAUI Community Toolkit