http://kb.cnblogs.com/zt/silverlight/

http://www.cnblogs.com/gnielee/archive/2010/01/15/silverlight-wpf-develop-summary.html

【第一步】理解布局管理

先看Silverlight4离线文档中的介绍

容器

说明

Canvas

在 x,y 空间中绝对定位子元素。

StackPanel

相对于水平或垂直堆栈中的另一个子元素来定位子元素。

Grid

在行和列中定位子元素。

【第二步】Canvas面板介绍

Canvas面板是一种很基础的布局面板,它可以定义一个区域,在该区域中可以使用相对于该区域的坐标显式定位子元素。

你可以通过一种XAML的特性--“附加属性”来对Canvas中的元素进行定位,Canvas 为启用布局的 Panel 元素之一。每个子对象都呈现在 Canvas 区域中。通过指定 x 和 y 坐标,可以控制对象在 Canvas 中的定位。这些坐标以像素为单位。x 和 y 坐标通常使用 Canvas.Left 和 Canvas.Top 的附加属性来指定。Canvas.Left 指定对象与包含它的 Canvas 的左侧之间的距离(x 坐标);Canvas.Top 指定对象与包含它的 Canvas 的顶部之间的距离(y 坐标)。

下面就打开昨天的“StudySilverlight”代码,将<Grid>先注释掉,我们写一个<Canvas>容器,向容器中添加两个按钮,指定其距离Canvas左侧的距离为50像素,距离上边为150像素,代码如下:

<Canvas x:Name="TestCanvas" Background="Silver">
    <Button x:Name="btnTest1" Content="按钮1" Width="100" Height="50" Canvas.Left="50" Canvas.Top="100"></Button>
    <Button x:Name="btnTest2" Content="按钮2" Width="100" Height="50" Canvas.Left="50" Canvas.Top="200"></Button>
</Canvas>

添加两个按钮,设置在Canvas的布局后,显示结果如下:

Canvas适用于其中包含的UI元素比较固定的情况,但是你如果想向程序中添加更多的控件,或者UI需要改变大小或能够移动,Canvas显得就不是那么灵活了,那样的话,你不得不忙于手写代码来移动Canvas内的东西,所以,应付这种情况,更好的办法是使用其他带有相关功能的布局方法,接下来介绍下StackPanel。

【第三步】StackPanel面板介绍

StackPanel是一种简单的布局面板,它支持用行或列的方式来定位其中包含的控件。它常用于安排页面上的一个很小部分的UI,例如,我们可以用下面的方式在页面上垂直排布三个按钮,代码如下:

<StackPanel x:Name="TestStackPanel" Background="Silver">
    <Button x:Name="btnTest1" Content="按钮1" Width="100" Height="50" Margin="10"></Button>
    <Button x:Name="btnTest2" Content="按钮2" Width="100" Height="50" Margin="10"></Button>
    <Button x:Name="btnTest3" Content="按钮3" Width="100" Height="50" Margin="10"></Button>
</StackPanel>

在运行时,StackPanel会自动的在一个垂直的堆叠(Stack)中排列按钮,显示结果如下:

如果,我们在<StackPanel>中添加“Orientation="Horizontal"”附加属性的话,显示结果就会变成下图:

【第四步】Grid面板介绍

为什么把最重要的Grid放到最后呢?哎呀,实在是因为太实用、太重要了嘛,放在最下面当地基,呵呵~

Grid控件是最灵活的布局面板,它支持多行和多列的方式排布,在概念上,它和HTML中的Table类似,但是不同于Table的是,你不需要把控件内嵌到标记中,而是通过定义<Grid.RowDefinitions>和<Grid.ColumnDefinitions>属性来定义控件所处的Grid的行或列,这两个属性是定义在<Grid>标签内,这样,你就可以在控件的附加属性中指定它属于哪一行哪一列,例如:

<Grid x:Name="TestGrid" ShowGridLines="True" Background="Silver">
        <Grid.RowDefinitions>
            <RowDefinition Height="60"></RowDefinition>
            <RowDefinition Height="60"></RowDefinition>
            <RowDefinition Height="60"></RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="110"></ColumnDefinition>
            <ColumnDefinition Width="110"></ColumnDefinition>
            <ColumnDefinition Width="110"></ColumnDefinition>
        </Grid.ColumnDefinitions>
</Grid>

其中“ShowGridLines="True"”是可以显示分割线的,这样便于演示,我们就定义了一个三行三列的类似于表格的Grid,这样还不行,我们往里面添加几个按钮试试。在</Grid.ColumnDefinitions>下面添加按钮,代码如下:

<Button x:Name="btnTest1" Content="按钮1" Width="100" Height="50" Grid.Row="1" Grid.Column="0"></Button>
        <Button x:Name="btnTest2" Content="按钮2" Width="100" Height="50" Grid.Row="2" Grid.Column="1"></Button>
        <Button x:Name="btnTest3" Content="按钮3" Width="100" Height="50" Grid.Row="0" Grid.Column="1"></Button>
        <Button x:Name="btnTest4" Content="按钮4" Width="100" Height="50" Grid.Row="1" Grid.Column="2"></Button>

通过Grid.Column和Grid.Row,我们指定按钮的位置在第几行第几列,在Grid中定义多行和多列的时候,还可以预先设置行和列的宽度或高度,灵活性明显要高于上两种方法。显示结果如下:

Silverlight的更多相关文章

  1. Silverlight 后台设置 button 纯色背景

    silverlight Button直接设置其background为某一颜色往往达不到效果.因为其内置模板把按钮背景弄成一个渐变画刷.所以想要纯色的背景就修改其模板. 在后台修改模板的代码如下: St ...

  2. 添加Silverlight应用到HTML

    Silverlight是跨浏览器,跨客户平台的浏览器插件,可以应用在Windows,Linux,Mac等平台.作为浏览器插件,Silverlight可以像Flash一样,很方便的嵌套在HTML页面中, ...

  3. Silverlight 手鼓达人-仿太鼓达人 开源

    Silverlight 手鼓达人-仿太鼓达人 介绍  手鼓达人是本人2012年中silverlight最火的一段时间开发的,本来目的只是想研究一下silverlight做游戏和做应用有何不同,但是后面 ...

  4. silverlight使用小计(先做记录后续整理)

    1.Grid: a.通过获取指定行的高度和指定列的宽度来获取指定单元格的宽高 b.几种宽高默认值: 宽高(Width/Heigth):1* 最大宽高(MaxWidth/MaxHeigth):正无穷大 ...

  5. SilverLight抛出 System.InvalidOperationException: 超出了2083 的最大URI

    在SilverLight中对于抛出 System.InvalidOperationException: 超出了 2083 的最大 URI 长度 的异常 处理 其实很简单 在 EntityFramewo ...

  6. 【Silverlight】打开Silverlight程序报错,"未找到导入的项目......请确认<Import>声明中的路径正确,且磁盘上存在该文件"

    在打开Silverlight程序时,报错(如图所示),程序使用的是Visual Studio 2013和最新的Silverlight版本(Silverlight5). 然后我在网上找了下说:Silve ...

  7. Silverlight 使用DataContractJsonSerializer序列化与反序列化 Json

    环境说明:Silverlight 5.1,.Net Framework  ​4.0 1.添加引用System.ServiceModel.Web.dll. 因为 System.Runtime.Seria ...

  8. Silverlight及WPF中实现自定义BusyIndicator

    在开发Silverlight或者WPF项目时,当我们调用Web服务来加载一些数据时,由于数据量比较大需要较长的时间,需要用户等待,为了给用户友好的提示和避免用户在加载数据过程中进行重复操作,我们通常使 ...

  9. Silverlight和WPF中DataContractJsonSerializer对时间的处理差异

    原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com Silverlight脱胎于WPF,他们的行为不完全并不完全相同,DataContractJsonSerializ ...

  10. [SL] Silverlight + WCF Demo项目

    I:项目描述:利用 Silverlight+WCF 技术,模拟资源管理器(如图1)功能,通过地址栏输入本地文件夹路径,然后将解析出来的该目录下所有文件(夹)存储到数据库中,然后再加载到界面上显示出来: ...

随机推荐

  1. 大数计算_BigNum优化_加减乘除乘方取余_带注释_数组

    #include <iostream> #include <algorithm> #include <cstring> #include <cstdlib&g ...

  2. KMP算法学习

    kmp算法完成的任务是:给定两个字符串O和f,长度分别为n和m,判断f是否在O中出现,如果出现则返回出现的位置.常规方法是遍历a的每一个位置,然后从该位置开始和b进行匹配,但是这种方法的复杂度是O(n ...

  3. Clr Via C#读书笔记---计算限制的异步操作

    线程池基础 1,线程的创建和销毁是一个昂贵的操作,线程调度以及上下文切换耗费时间和内存资源. 2,线程池是一个线程集合,供应你的用程序使用. 3,每个CLR有一个自己的线程池,线程池由CLR控制的所有 ...

  4. Newtonsoft.Json(Json.Net)学习笔记(转)

    概述 Newtonsoft.Json,一款.NET中开源的Json序列化和反序列化类库,通过Nuget获取.(查看原文) 下面是Json序列化和反序列化的简单封装: /// <summary&g ...

  5. 网站性能测试工具--MS Web Application Stress Tool

    MS Web Applicaion Stress Tool 是一款网页测试的性能工具,具体的使用可以参考下面这篇博客文章 http://cuisuqiang.iteye.com/blog/193640 ...

  6. hibernate查询语句实例代码

    一.聚集函数的使用: avg(...), sum(...), min(...), max(...) count(*) count(...), count(distinct ...), count(al ...

  7. Oracle【IT实验室】数据库备份与恢复之三:OS备份/用户管理的备份与恢复

    用户管理的备份与恢复也称 OS物理备份,是指通过数据库命令设置数据库为备份 状态,然后用操作系统命令,拷贝需要备份或恢复的文件.这种备份与恢复需要用户的 参与手工或自动完成. 对于使用 OS拷贝备份的 ...

  8. 6-02使用SQL语句向表中插入数据

    插入语句的语法: INSERT INTO 表() VALUES(值列表) 注意事项: 1:每次插入一行数据,不能只插入半行或几列数据. 2:每一个数据值的数据类型.精度和小数位数必须与相应的列匹配. ...

  9. 第二十三篇:在SOUI中使用LUA脚本开发界面

    像写网页一样做客户端界面可能是很多客户端开发的理想. 做好一个可以实现和用户交互的动态网页应该包含两个部分:使用html做网页的布局,使用脚本如vbscript,javascript做用户交互的逻辑. ...

  10. 无法定位程序输入点 _glutCreateWindowWithExit于动态链接库glut32.dll上

    程序运行提示错误"无法定位程序输入点 _glutCreateWindowWithExit于动态链接库glut32.dll上",网上查了说是opengl的.lib和.dll版本过低, ...