Grid
Para criar uma janela responsiva devemos administrar todos os componentes dentro de um layout.
Um layout é uma regra de organização dos elementos dentro de uma janela.
Nesta aula vamos aprender o layout chamado Grid
.
Grid
O layout Grid
organiza seus elementos dentro de uma grade.
O primeiro passo para configurar as colunas da grade é criar uma tag de configuração e uma tag para cada coluna indicando o tamanho desejado:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="150" />
<ColumnDefinition Width="50" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
</Grid>
Ficaremos com o resultado
Perceba que a última coluna ocupou o espaço restante.
Para colocar um elemento dentro de uma coluna basta indicar, nos parâmetros do elemento, em qual coluna ele ficará. Lembre que as colunas começam a contar à partir do 0.
No exemplo a seguir teremos um botão na segunda coluna.
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="150" />
<ColumnDefinition Width="50" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<Button Content="Um Botao" Grid.Column="1"/>
</Grid>
Podemos também usar o símbolo *
se referir ao espaço restante
No exemplo a seguir a coluna 2 ocupará duas partes do espaço restante, enquanto a coluna 3 ocupará uma parte.
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="2*" />
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
</Grid>
Também podemos usar a configuração auto
para que uma coluna fique do menor tamanho possível para conter seus elementos.
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<Button Content="Um Botao" Grid.Column="1"/>
</Grid>
A mesma técnica pode ser usada para configurar as linhas.
No exemplo abaixo teremos 4 linhas com um botão na linha 0 e coluna 1, e outro botão na linha 2 e coluna 2
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="100" />
<RowDefinition Height="auto" />
<RowDefinition Height="100" />
</Grid.RowDefinitions>
<Button Content="Um Botao" Grid.Column="1" Grid.Row="0"/>
<Button Content="Segundo Botao" Grid.Column="2" Grid.Row="2"/>
</Grid>
Se quiser que um elemento ocupe mais de uma coluna (ou linha) você pode usar o atributo Grid.Column
(ou Grid.RowSpan
).
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="100" />
<RowDefinition Height="auto" />
<RowDefinition Height="100" />
</Grid.RowDefinitions>
<Button Content="Um Botao" Grid.Column="1" Grid.Row="0" Grid.RowSpan="2"/>
<Button Content="Segundo Botao" Grid.Column="2" Grid.ColumnSpan="2" Grid.Row="2"/>
</Grid>