[Desenvolvimento] Adicionar controles na interface em tempo de execução

0

legoOlá pessoal, tudo bom?

Quem nunca passou pela situação de não conseguir prever quantos controles de tela de um determinado tipo serão necessários para apresentar ou compor o layout de uma APP? Geralmente, nesses casos, temos dados sendo gerados ou recebidos dinamicamente através de webservices ou mesmo via consultas REST retornando JSON.

Pensando nessa situação, resolvi escrever esse post para tratar justamente do assunto “Como criar controles XAML via código em C# e adiciona-los na interface da APP”.

Em primeiro lugar temos que ter em mente que esses controles ao serem criados dinamicamente deverão ser inseridos dentro de algum container previamente existente na APP, como por exemplo, um StackPanel, Grid, etc. Sabendo disso, basta criar os elementos dentro de algum método/ação do seu código C# e ir posicionando-os, ou melhor, inserindo-os no container desejado.

Para exemplificar melhor, observe o código C# abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
...
...
//Considere que a variável "membros" abaixo é o resultado de uma consulta a um arquivo XML
var membros = e.Result.Descendants("membros").Elements("membro").ToList();
for (int i = 0; i < membros.Count; i++)
{
  TextBlock txt = new TextBlock(); //Elemento XAML sendo criado via C#
  txt.Text = string.Format("» {0} - {1} - {2} - ({3})",
             membros[i].Element("nome").Value.Trim(),
             membros[i].Element("partido").Value.Trim(),
             membros[i].Element("uf").Value.Trim(),
             membros[i].Element("situacao").Value.Trim());
  txt.Width = 450;
  txt.TextWrapping = TextWrapping.Wrap;
  //ContentPanel seria o nome de um elemento do tipo StackPanel,
  //sendo assim, estamos adicionando vários TextBlocks como "filhos"
  //do StackPanel (container)
  ContentPanel.Children.Add(txt);
}
...
...

Viram como é simples?

Post Relacionado: 

Grande abraço,
Eduardo Henrique Rizo (@eduardorizo)

Fonte: Blog do Eduardo H. Rizo

Share.

About Author

Bacharel em Ciência da Computação pela FIPP/Unoeste, Pós-Graduado em Desenvolvimento de Sistemas Web, Segurança da Informação e Avaliação do Ensino e da Aprendizagem, Professor universitário e responsável pelo setor de desenvolvimento de sistemas web da Universidade do Oeste Paulista. MCP e MCPS pela Microsoft e nas horas vagas dedica um pouco do seu tempo escrevendo posts técnicos sobre desenvolvimento de sistemas web, windows phone, gerenciamento de servidores e outros assuntos para a comunidade.