Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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.DefineRows.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 Enums.
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 Enums 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