Pilhas de views
A classe StackLayout organiza seus filhos em uma pilha. Ela define apenas duas propriedades próprias:
- Orientation do tipo StackOrientation, uma enumeração com dois membros: Vertical (o padrão) e Horizontal.
- Spacing do tipo double, inicializando em 6.
StackLayout parece ideal para o trabalho de listagem de cores. Você pode usar o método Add definido por IList<T> para adicionar um herdeiro à coleção Children da instância StackLayout. Aqui está um código que cria vários objetos de Label a partir de duas matrizes e, em seguida, adiciona cada Label para a coleção Children de um StackLayout:
O objeto StackLayout pode então ser definido como a propriedade Content da página.
Mas a técnica de usar matrizes paralelas é bastante perigosa. E se elas estiverem fora de sincronia ou tiverem um número diferente de elementos? Uma abordagem melhor é manter a cor e o nome juntos, talvez em uma pequena estrutura com campos de Color e Name, ou como uma matriz de valores Tuple <Color, string>, ou como um tipo anônimo, como demonstrado no programa ColorLoop:

Ou você pode inicializar a propriedade Children de StackLayout com a coleção explicita de views (semelhante ao modo da coleção Spans do objeto FormattedString que foi inicializado no capítulo anterior). O programa ColorList define a propriedade Content da página para um objeto StackLayout que então tem sua propriedade Children inicializada com 17 Label views:

Você não precisa ver o código de todos os 17 filhos para ter uma ideia! Independentemente de como você preencha a coleção Children, aqui está o resultado:

Obviamente, isto não é ótimo. Algumas cores não são visíveis a todos, e algumas delas são muito fracas para ler bem. Além disso, a lista transborda a página em duas plataformas, e não há nenhuma maneira de deslocá-lo para cima.
Uma solução consiste em reduzir o tamanho do texto. Em vez de usar NamedSize.Large, tente um dos valores menores.
Outra solução é no próprio StackLayout: StackLayout que define uma propriedade Spacing do tipo double que indica o quanto de espaço deixar entre os herdeiros. Por padrão, e 6.0, mas você pode definir um valor menor (por exemplo, zero) para garantir que todos os itens se encaixem:

Agora todas as visualizações Label ocupam apenas o espaço vertical como requerido para o texto. Você pode até mesmo definir Spacing para valores negativos para fazer os itens se sobreporem.
Rolagem não é automática e deve ser adicionada com um ScrollView. Mas há outro problema com esses programas: eles precisam criar explicitamente uma ordem de cores e nomes ou criar explicitamente uma Label view para cada cor. Isso é um pouco tedioso, e, portanto, repulsivo para programadores. Poderia ser automatizado?