#7-1 Layout
이번 강좌에서는 Silverlight 에서 가장 기본이 되는 Layout 에 대해 알아 보도록 하겠습니다. Layout 은 위치를 를 잡아 주는 아주 중요한 컨트롤 입니다. 레이아웃 컨트롤의 종류는 기본적으로 Canvas , Grid ,StackPanel 등이 있고 Silverlight Toolkit 에 포함된 확장 컨트롤인 WrapPanel, DockPanel 등이 대표적인 레이아웃 컨트롤 이라 할 수 있습니다.
# Canvas Control
레이아웃 컨트롤은 자식 컨트롤의 위치를 잡는 방법에서 큰 차이 점이 있습니다. 그중 Canvas 컨트롤에 대해 알아 보도록 하겠습니다.
Silverlight 가 막 세상에 나왔을때는 지금과 같은 많은 컨트롤들이 지원 되지는 않았습니다. 그때는 레이아웃 컨트롤 역시 마찬가지로 Canvas 밖에 지원하지 않았습니다. 이처럼 가장 기본이 되었던 Canvas 컨트롤의 특징은 자식 UIElement 들의 위치를 잡을때 상단과 좌측을 기준으로 위치를 잡는것이 큰 특징 입니다. 
<Button Width="100" Height="30" Canvas.Left="100" Canvas.Top="50" Content="Click!!"/>
</Canvas>

모든 XAML 들은 동적으로 생성이 가능한데 , Canvas 역시 동적으로 생성이 가능합니다. Canvas 컨트롤을 동적으로 생성에 기본 레이아웃 컨트롤인 LayoutRoot 컨트롤의 자식으로 추가해 보겠습니다.( 간혹 LayoutRoot 를 지워 버리시는 분이 있으신데.... 좋지 않은 행동입니다.)
Canvas can = new Canvas(); LayoutRoot.Children.Add(can);
레이아웃 컨트롤은 다수의 자식 UIElement 들을 포함시킬 수 있는 컨트롤 입니다. Canvas 컨트롤 역시 다수의 자식 컨트롤을 추가 할수 있는데 동적으로 자식의 컨트롤을 추가하는 방법은 다음과 같습니다.
Button btn = new Button(); btn.Width = 100; btn.Height = 30; btn.Content = "Click!!"; can.Children.Add(btn);
이렇게 레이아웃 컨트롤에 있는 Children 에 자식 UIElement 를 추가하면 됩니다. Canvas 에 자식이 추가되게 되면 기본적으로 자식은 (0,0) 좌표에 위치 하게 됩니다.

Canvas.SetLeft(btn, 100); Canvas.SetTop(btn, 50);

Canvas 에 추가된 자식 UIElement 들은 레어어와 같이 계층적으로 들어 가게 됩니다. 이 계층은 마지막에 추가된것이 가장 위로 가는 특징이 있는데 XAML 에서 다음과 같이 자식의 UIElement 추가 되었을 때는 마지막에 들어간 자식이 가장 화면 위에 나타 납니다. 이것은 Canvas 뿐만 아니라 자식을 갖는 모든 컨트롤이 공통 됩니다.

<Rectangle Width="100" Height="100"
Fill="Red" Canvas.Left="150"
Canvas.Top="100" Canvas.ZIndex="1"></Rectangle>
<Rectangle Width="100" Height="100"
Fill="Blue" Canvas.Left="190"
Canvas.Top="140" Canvas.ZIndex="2"></Rectangle>
<Rectangle Width="100" Height="100"
Fill="Yellow" Canvas.Left="220"
Canvas.Top="170" Canvas.ZIndex="1"></Rectangle>
</Canvas>

동적으로도 Canvas.SetZIndex(UIElement element , int value) 를 이용하면 변경 할수 있습니다.




















