每一个XAML文件都应该有一个布局对象,布局对象相当于一个容器他可以容纳几乎所有的XAML元素,Silverlight为开发者提供了三种布局对象Canvas、StackPanel、Grid。
Canvas:Canvas允许声明一个区域,包含在该区域内的XAML元素可以使用相对Canvas坐标的附加属性来显示和定位元素。
StackPanel:StackPanel允许把若干个元素放在StackPanel中排成一行或者一列。
Grid:允许声明一个若干行若干列组成网格,行和列具备自适应能力。
Canvas 相对定位
Canvas 相对定位是在Canvas目标元素相对于父元素Canvas的位置,Canvas内的任何元素都可以使用附加属性Canvas.Top和Canvas.Left来设置元素的相对位置。
Canvas嵌套
Canvas嵌套,在Canvas中可以进行多个Canvas对象进行嵌套。
使用边框(Border)
Canvas有BackGround属性可以设置背景颜色,但是Canvas没有类似于矩形边框的颜色和宽度,更不能像矩形一样设置圆角边框,但是Silverlight提供了专门的边框元素Border可以实现元素的边框,下面结合Canvas嵌套、Canvas相对定位、Canvas使用边框我们做了一个综合的例子:
<Canvas x:Name="LayoutRoot" Background="White">
<Border BorderThickness="30" BorderBrush="Green" CornerRadius="30" Canvas.Left="30" Canvas.Top="40" Width="330" Height="230">
<Canvas Background="Yellow">
<Canvas Background="Blue" Width="230" Height="130" Canvas.Left="20" Canvas.Top="21" >
<Canvas Background="Red" Width="200" Height="97" Canvas.Left="15" Canvas.Top="20">
<TextBlock Height="63" Width="194" FontSize="15" Foreground="White" Canvas.Left="6" Canvas.Top="19">
这是一个使用了边框还使用了<LineBreak/>Canvas嵌套的Canvas
</TextBlock>
</Canvas>
</Canvas>
</Canvas>
</Border>
</Canvas>
运行结果:
Z轴顺序
前面我们讨论了元素二维空间的定位,Silverlight还支持一种Z轴顺序,其元素之间可以相互重叠对,对象之间的位置是根把XAML声明的先后顺序来决定的,后声明的在先声明之上这样就会发生 重叠,但是这种重叠并不是一味不变的我们可以根据Silverlight提供的Canvas的ZIndex属性来设置元素显示的先后顺序来确定哪一个在上面哪一个在下面(索引值越小越在下面),例如下面这个例子(左边的是使用默认的排序,右边的是设置了元素的ZIndex属性):
<Canvas x:Name="LayoutRoot" Background="White">
<Ellipse Width="100" Height="100" Stroke="Black" StrokeThickness="3" Fill="Yellow"></Ellipse>
<Ellipse Width="100" Height="100" Stroke="Black" StrokeThickness="3" Fill="Green" Canvas.Left="20" Canvas.Top="20"></Ellipse>
<Ellipse Width="100" Height="100" Stroke="Black" StrokeThickness="3" Fill="Red" Canvas.Left="42" Canvas.Top="43"></Ellipse>
<Ellipse Width="100" Height="100" Stroke="Black" StrokeThickness="3" Fill="Yellow" Canvas.Left="300" Canvas.ZIndex="3"></Ellipse>
<Ellipse Width="100" Height="100" Stroke="Black" StrokeThickness="3" Fill="Green" Canvas.Left="288" Canvas.ZIndex="2" Canvas.Top="28"></Ellipse>
<Ellipse Width="100" Height="100" Stroke="Black" StrokeThickness="3" Fill="Red" Canvas.Left="269" Canvas.ZIndex="1" Canvas.Top="62"></Ellipse>
</Canvas>
运行结果:
例子很简单,只是为了体验Silverlight的Canvas的布局功能 。