silverlight布局和式样中的常用三大控件 Canvas Grid StackPanel

一.Canvas  

    Canvas(画布)控件可能是最简单的布局控件,他提供了一个空白空间,可在上面任何地方布局你需要的控件,可操作空间的Canvas.Letf和Canvas.Top属性来执行控件在画布上的布局。注意,Canvas控件并不提供自动布局功能。

选中Canvas后,可以在右边“Properties”属性栏中修改其属性,从属性栏中可以看出,Canvas是嵌 套在Grid中,所以,其位置可以由Grid属性控制。

选中Canvas中的控件,可以在右边“Properties”属性栏中看到该控件在容器Canvas中的位置,包括 左距离,顶距离,以及Z坐标值。

其中Left可以理解为X坐标值,Top为Y坐标值,ZIndex(Z坐标值),如果从3D的角度来理解,是相对 于平面的立体值。对于ZIndex 的使用,可以看看下例,如果有两个Canvas控件,位置坐标相同,会形成 覆盖,这里定义ZIndex,值越大的将会在上方覆盖ZIndex值小的控件。通过这个参数设置,我们可以实现 很多不同的布局效果。

从上图可以看到,Canvas中的子控件,属性栏中,没有Grid控件中的Margin属性,而是使用Left和Top 进行定位。根据微软官方的解释,Canvas中的控件,使用Canvas.left和Canvas.top定位,传递该数值到 父容器控件Canvas,重载父容器Canvas的 AttachedProperty(附加属性),这样意味着父容器Canvas不 能更改子控件的位置。这里引入了AttachedProperty(附加属性),该属性是属于父控件的属性,但是可 以被子控件进行设置。。

这里我创建四个Canvas,每个Canvas中包含一个圆形控件。当前,处于相互覆盖状态。

按着Shift,分别选中 四个Canvas控件,点击鼠标右键,“Group into” - > “Canvas“,

选中后,Blend将生 成新的Canvas父控件,将选中的四个Canvas控件,作为子控件。

 1 <Canvas  Margin="14,58,130,104" Grid.Row="1">
 2     <Canvas Height="88"  Width="100">
 3         <Ellipse Fill="Red" Stroke="Black"  Height="84" Width="83" Canvas.Left="11" Canvas.Top="2"/>
 4      </Canvas>
 5     <Canvas Width="100" Height="88"  Canvas.Left="64">
 6         <Ellipse Fill="#FF0081FF" Stroke="Black"  Height="84" Width="83" Canvas.Left="11" Canvas.Top="2"/>
 7      </Canvas>
 8     <Canvas Height="88" Width="100"  Canvas.Left="127">
 9         <Ellipse Fill="#FF71FF00"  Stroke="Black" Height="84" Width="83" Canvas.Left="11" Canvas.Top="2"/>
10      </Canvas>
11     <Canvas Height="88" Width="100"  Canvas.Left="192">
12         <Ellipse Fill="#FFF4FF1C" Stroke="Black"  Height="84" Width="83" Canvas.Left="11" Canvas.Top="2"/>
13      </Canvas>
14 </Canvas>

现在选中父控件的Canvas,将Opacity修改 为40,可以看到,所有子控件的Opacity统一修改为40.效果如下:

如果 ,我们分别设置父控件下的四个Canvas控件Opacity属性,即可看到各自Canvas将按照自己属性为主,效 果如下:

Canvas通过Group的 功能,可以实现多个控件实现相同方式下动画效果,在Silverlight开发中也是常用的功能。

二.Grid

    使用Grid,对控件布局的控制可以提升到一个新的层次。Grid允许将屏幕定义成一个透明网格,每个单元格都可以有不同的高度和宽度,允许使用自动布局机制,将控件紧贴它所在的单元格的边界。

    Grid控件在布局中应用非常广泛,通过ColumnDefinitions和RowDefinitions属性来控制Grid的行列数量。列有3个属性,定义着列的最小宽度、最大宽度和当前宽度。用户改变应用程序大小的时候,你希望应用程序正确响应。MinWidth和MaxWidth属性的意思非常明显。Silverlight会在这两个值之间改变列的宽度,不会小于MinWidth,也不会大于MaxWidth。可以再运行时设置Width属性,从而将列固定为那个宽度,也可以设置为星号(*),表明列宽可变。星号是默认值。

三.StackPanel

    StackPanel允许对包含的内容进行水平或垂直排列。通过更改Orientation属性来实现。通常布局中用StackPanel来划分单元,把所要的各类控件放入其中进行有序、规范的排列。

在silverlight应用程序中灵活运用这些布局控件,可以创建非常“智能”的应用程序,他们能根据屏幕和窗口大小的变化而灵活地调节自己。这最终为用户提供了最好的用户体验、

原文地址:https://www.cnblogs.com/loyung/p/3041769.html