Para você criar um layout qualquer dentro do Silverlight deverá, obrigatoriamente, arranjar os seus objetos dentro de um ou mais painéis (Panels). Os painéis funcionam como uma espécie de container para hospedar os seus objetos, sendo que os mesmos disponibilizam propriedades que permitem você posicionar os seus objetos da maneira como achar mais conveniente.
Inclusive você pode criar os seus painéis customizados e utilizá-los sozinhos ou em combinação com outros já existentes, porém vamos falar agora dos painéis que vem disponível com o Silverlight: o Canvas, o StackPanel e a Grid.
O Canvas é um painel que deixa você movimentar seus objetos livremente dentro dele. O nome do objeto, inclusive, é inspirado pela possibilidade você ter uma folha em branco e um lápis – ou seja, tem total liberdade para fazer o que bem desejar.
Para isto o Canvas disponibiliza algumas Attached Properties para seus objetos:
Importante salientar que em termos de performance, o Canvas é o que obtém o melhor resultado, visto que os pixels estão declarado de forma explicita – ou seja, o Silverlight não precisará de muito esforço para calcular onde os objetos devem aparecer na tela. Entretanto isto só é significativo numa tela que possui muitos elementos visuais (muitos mesmo), o que dificilmente ocorrerá na prática.
Vamos há alguns exemplos?
<Canvas> <Rectangle Height=”150″ Width=”150″ Fill=”Blue” /> <Rectangle Height=”150″ Width=”150″ Fill=”Yellow” /> <Rectangle Height=”150″ Width=”150″ Fill=”Green” /> </Canvas>
Temos três retângulos idênticos declarados dentro deste layout, com a diferença da coloração interna. O primeiro é azul, o segundo é amarelo e o terceiro é verde. Como isto será exibido? A resposta é um retângulo verde, nada mais.
Isto por que como ele vem por último, ele acaba sobrepondo o amarelo, que por acaba sobrepor o azul.
Agora, vamos mudar o nosso exemplo e repetir a pergunta:
<Canvas> <Rectangle Height="150" Width="150" Fill="Blue" /> <Rectangle Height="150" Width="150" Fill="Yellow" Canvas.ZIndex="1" /> <Rectangle Height="150" Width="150" Fill="Green" /> </Canvas>
<Canvas>
<Rectangle Height="150" Width="150" Fill="Blue" />
<Rectangle Height="150" Width="150" Fill="Yellow" Canvas.ZIndex="1" />
<Rectangle Height="150" Width="150" Fill="Green" />
</Canvas>
Respondeu corretamente quem diz que o que aparecerá agora será um retângulo amarelo, visto que o ZIndex dos demais, por padrão, é 0! Logo, quem tem o maior ZIndex é o retângulo amarelo.
Agora vamos mexer um pouco no posicionamento dos objetos.
<Canvas> <Rectangle Height="150" Width="150" Fill="Blue" Canvas.ZIndex="1" /> <Rectangle Height="150" Width="150" Fill="Yellow" Canvas.ZIndex="2" Canvas.Left="50" Canvas.Top="100" /> <Rectangle Height="150" Width="150" Fill="Green" Canvas.Left="100" Canvas.Top="25" /> </Canvas>
<Rectangle Height="150" Width="150" Fill="Blue"
Canvas.ZIndex="1" />
<Rectangle Height="150" Width="150" Fill="Yellow"
Canvas.ZIndex="2"
Canvas.Left="50"
Canvas.Top="100" />
<Rectangle Height="150" Width="150" Fill="Green"
Canvas.Left="100"
Canvas.Top="25" />
O resultado é o seguinte:
Veja só que interessante: o retângulo amarelo (ZIndex=”2″) tem prioridade sobre o azul (ZIndex=”1″) que tem prioridade sobre o verde (ZIndex=”0″).
Thiago Cardoso Luiz edited Revision 4. Comment: change tags
Thiago Cardoso Luiz edited Revision 3. Comment: add title
Thiago Cardoso Luiz edited Revision 2. Comment: add toc
Thiago Cardoso Luiz edited Revision 1. Comment: add author
Thiago Cardoso Luiz edited Original. Comment: add author
rev6:= change tags