`

Silverlight 教程第二部分:使用布局管理 (木野狐译)

阅读更多

【原文地址】Silverlight Tutorial Part 2: Using Layout Management
【原文发表日期】 Friday, February 22, 2008 5:55 AM

【转载地址】http://blog.joycode.com/scottgu/archive/2008/02/24/114898.aspx

 

这是8个系列教程的第2部分,这个系列示范如何使用 Silverlight 2 的 Beta1 版本来创建一个简单的 Digg 客户端应用。这些教程请依次阅读,将有助于您理解 Silverlight 的一些核心编程概念。

理解布局管理

Silverlight 和 WPF 都支持一种灵活的布局管理系统,能让开发者和设计师轻松的定位 UI 上的控件。该布局系统对显式指定坐标的控件支持固定的定位模型;除此之外,还支持一种更为动态的定位模型,控件和布局能随着浏览器的大小改变而自动改变其 大小和方位。

在 Silverlight 和 WPF 中,开发者可以用布局面板来协调包含在其中的控件的位置和大小。Silverlight Beta1 中内建的布局面板包括在 WPF 中最常用的3种:

  • Canvas
  • StackPanel
  • Grid

Canvas面板

Canvas 面板是一种很基础的布局面板,它支持对其中的控件采用绝对坐标定位。

你可以通过一种 XAML 特性--- "附加属性” 对 Canvas 中的元素进行定位。用附加属性,你可以指定控件相对于其直接父 Canvas 控件的上、下、左、右坐标的位置。附加属性很有用,因为它让父面板可以扩展其中包含的控件的属性集。Canvas 通过定义扩展属性 Top 和 Left, 就能定义其中 Button (或其他任何 UI 元素)的 Left, Top,而不需要真正向 Button 类中添加这个属性,或 修改 Button 类。

我们可以向 Canvas 容器中添加两个按钮,指定其距离 Canvas 左侧的距离为 50 像素,离上边的距离则分别为 50 像素和 150 像素。使用如下 XAML 语法即可完成(其中 Canvas.Top 和 Canvas.Left 都是附加属性的例子):


这些代码绘制的界面效果如下:


Canvas 适用于其中包含的 UI 元素比较固定的情形,但是如果你想向其中添加更多的控件,或者 UI 需要改变大小或能够移动,Canvas 显得不太灵活。这时,你不得不忙于手写代码来移动 Canvas 中的东西(这很痛苦)。应付这种动态的场景,更好的办法通常是使用其它带有相关功能的内建语义的布局面板,如 StackPanel 和 Grid。

StackPanel

StackPanel 是一种简单的布局面板,它支持用行或列的方式来定位其中包含的控件。StackPanel 常用于安排页面上的一个很小的 UI 部分。

例如,我们可以用下面的 XAML 标签在页面上垂直的排布3个按钮:


在运行时刻,StackPanel 会自动在一个垂直地堆叠(stack)中排列我们的按钮(【译注:这也是为什么叫 StackPanel 的原因】),如下所示:


同样,我们还可以把 Orientation 属性设置为 Horizontal 而不是 Vertical (默认值):


这会让 StackPanel 水平地排布3个按钮,如下图所示:


Grid面板

Grid 控件是最灵活的布局面板,它支持用多行和多列的方式排布控件。在概念上,它和 HTML 里的 Table (表格)类似。

不同于 Table 的是,你不需要将控件内嵌到行/列元素中,而是通过定义 <Grid.RowDefinitions> 和 <Grid.ColumnDefinitions> 属性来定义 Grid 的行和列。这两个属性需要定义在 <Grid> 标签内。这样之后,你就可以在其中的控件上,用 XAML 的“附加属性”语法指定它属于哪一行、哪一列。

比如,我们可以用如下语法定义3行3列的 Grid 布局,然后在其中放置4个按钮:


以上代码会按下图方式排布按钮:


除了支持绝对尺寸定义(如:Height="60"),Grid 的 RowDefinition 和 ColumnDefinition 控件还支持自动改变大小的模式(Height="Auto"),这样会根据其中内容的尺寸自动改变 Grid 或 Row 的尺寸(你也可以指定最大或最小尺寸限制)。

Grid 的 Row 和 ColumnDefinitions 还支持叫做 "Proportional Sizing" (按比例缩放)的特性。用这个特性,可以让 Grid 的行列按相对比例的方式排放(如:你可以指定第二行的尺寸为第一行的2倍)。

你会发现 Grid 提供了非常多的功能和灵活性 - 而它也许会成为你最终最常用的布局面板控件。

用布局面板排布我们的 Digg 页面

我们创建 Digg 例子的目标,是得到最终看起来像下图的页面:


要创建这种布局,我们首先添加一个其中包含两个 RowDefinition 的根级 Grid 面板。第一行的高度是 40 像素,而第二行则占据所有剩下的空间(Height="*"):


小技巧:注意上面我将 Grid 的 ShowGridLines 属性设置为 True. 这样我们在运行时就能轻易的看到其行列的分界线:


接下来,我们在刚才的根级 Grid 面板里,添加第二个 Grid 面板到第一行的位置,用它来排布页面顶部的行(页面头部)。我们在其中创建3列:分别容纳标题,搜索文本框,和搜索按钮:


完成了这些后,我们就得到了 Digg 搜索页面的基本布局,如下所示:


注:如果不用嵌套的 Grid,我们还可以用一个 2行3列的 Grid 来完成这个布局,配合使用 Grid 的 ColSpan/RowSpan 特性来合并多个列中的内容(和你在 HTML table 中的做法类似)。我不这么做,而是选择使用嵌套 Grid 的原因,是因为这样更便于学习和理解。

现在我们已经完成了布局,接下来要做的是向其中添加控件。

对头部的行,我们用内建的 <Border> 控件(设置其 CornerRadius 为 10,以得到圆角效果)并在其中添加一些文本来创建标题。我们用内建的 <WatermarkedTextBox> 控件来创建第二列的搜索文本框。并在第3列放置一个搜索 <Button>. 然后我们在第二行放一些占位文字,稍后我们会在这里显示搜索结果。

注:下面我会直接在控件中内嵌样式信息(FontSize, Colors, Margins 等)。在这个系列教程中,晚一点我会演示如何用 Styles 来提取、封装这些设定到一个独立的文件中(类似 CSS),以便于在整个应用程序中重用。

 

现在,让我们运行一下应用程序,就会显示出如下的界面:


动态改变应用程序的尺寸

你也许注意到了,在上面的 XAML 中我们的顶层控件设置成了固定的高度和宽度:


这样设置,我们的 Silverlight 应用程序会一直保持这个固定的尺寸。放大浏览器的尺寸会更明显:


虽然在某些场合下,将内嵌的应用程序固定在 HTML 页面的一个固定尺寸的区域内会很有用,但我们的 Digg 搜索程序不一样,我们宁愿它能自动随着浏览器而缩放,就像一个普通的 HTML 页面那样。

好消息是,这很容易实现。只要去除根控件上的 Width 和 Height 属性就行了:


这样,我们的 Silverlight 应用程序就会自动扩展(或收缩),以填满其嵌入的 HTML 容器。因为我们用来测试的 SilverlightTestPage.html 文件将 Silverlight 控件放置在一个 HTML <div>元素中,并且其 CSS 设置中宽高均为 100%, 所以 Digg 应用程序最终会填满整个浏览器:


注意页面头部中的文字内容的尺寸是如何随着浏览器宽度而自动改变的:


当我们缩小浏览器尺寸时,带水印的文本框和搜索按钮会保持同样的尺寸,因为其 Grid 容器列的宽度是固定的。包含 "Digg Search" 标题的 <Border> 控件却会自动调整尺寸,因为其 Grid 列的宽度设置成了 Width="*".

我们不需要编写一行代码就可以启用这个布局行为,Grid容器和布局系统会为我们自动调整大小或流动其中的任何东西。

下一步

现在我们已经创建好了 Digg 程序的布局结构,并且定义好了页面头部的行。

下一步,我们会实现该程序的搜索行为 - 让它在程序的终端用户搜索某个标题时,能够真正的从 Digg.com 去获取故事内容。

如果你想知道怎么实现,请继续阅读下一篇: 使用 Networking 获取数据并填充 DataGrid

(翻译:木野狐

  • 大小: 37.3 KB
  • 大小: 20.7 KB
  • 大小: 46.9 KB
  • 大小: 21.6 KB
  • 大小: 41.5 KB
  • 大小: 43.2 KB
  • 大小: 44.7 KB
  • 大小: 16.4 KB
  • 大小: 55.4 KB
  • 大小: 25.2 KB
  • 大小: 52 KB
  • 大小: 57 KB
  • 大小: 58 KB
  • 大小: 65.3 KB
  • 大小: 6.1 KB
  • 大小: 50.3 KB
  • 大小: 99.2 KB
  • 大小: 21 KB
  • 大小: 15.3 KB
  • 大小: 67.6 KB
分享到:
评论

相关推荐

    Silverlight教程

    · 第二部分:使用布局管理 (木野狐译) · 第三部分:使用 Networking取回数据并填充DataGrid · 第四部分:使用 Style 元素更好地封装观感 (木野狐译) · 第五部分:用 ListBox 和 DataBinding 显示列表数据 ...

    野狐围棋官方网站

    围棋对弈软件,版本为7, 很厉害的, 可以选择不段数进行对弈,水平可以达到专业水平,业余的都赢不到它; 解压就可以直接用

    野狐围棋win7缺乏的dll库

    国内著名的野狐围棋客户端,缺少的dll库 mfc100ud.dll,msvc100d.dll,msvcp100d.dll

    Live555 源代码分析 之 mediaServer RTSP服务器 pdf 详解 作者灯下野狐

    Live555 源代码分析 之 mediaServer RTSP服务器 作者:灯下野狐 有幸下载到资源,共享给大家。 因为我之前下载好多源码解释 资源分最多达15分都被坑。 这把力荐。

    浅埋大跨连拱隧道结构稳定性有限元分析

    通过数值模拟手段对野狐岭二号浅埋、大跨连拱隧道进行结构力学分析,系统地研究了施工方案中应力变化情况和各开挖阶段围岩的稳定性。研究表明:三导洞法设计方案在施工过程中的围岩变形相对较小,应力状态良好,能避免在...

    curry7 操作文档.pdf

    ERP采集系统curry7中文操作手册

    Live555源码分析RTSP客户端

    Live555源代码分析之RTSP客户端...Author: 灯下野狐 E-mail: dengxiayehu@yeah.net Date : 2012-02 PS : 欢迎交流,转载请务必注明出处。 以 testRTSPClient.cpp 为例,介绍 Live555 中 RTSP 客户端的处理。

    Leela0110.exe给jdricky

    此文件专门给野狐围棋用户名jdricky的。第二个文件叫zenith免费送。闲人勿扰。再送一个叫思佳围棋较弱的人工智能软件。

    围棋pachi软件,exe

    围棋pachi软件,可以安装包,也可以采用命令行模式进行下棋,水平大概在野狐3-6段。采用mcts,深度学习

    象棋小虫版.rar小虫象棋2010年版本

    小虫象棋团队在吸收2010年版的优秀知识的基础上,使用最新的位棋盘技术重新编写了整个引擎,同时采用了最先进的搜索算法,引擎的运行效率提高了200%以上,直接的棋力提升更是高达400等级分,在与一些知名象棋软件的...

    浅埋大跨连拱隧道结构稳定性有限元分析 (2010年)

    通过数值模拟手段对野狐岭二号浅埋、大跨连拱隧道进行结构力学分析,系统地研究了施工方案中应力变化情况和各开挖阶段围岩的稳定性。研究表明:三导洞法设计方案在施工过程中的围岩变形相对较小,应力状态良好,能...

    改进版win人机对战围棋

    改进了先前版本的一些错误,可以在野狐围棋和别人对战,棋力一级没问题。 对学围棋应该有一些帮助。 非源代码,源代码都在博客上了。

    TensorFlow与主流深度学习框架对比

    引言:AlphaGo在2017年年初化身Master,在弈城和野狐等平台上横扫中日韩围棋高手,取得60连胜,未尝败绩。AlphaGo背后神秘的推动力就是TensorFlow——Google于2015年11月开源的机器学习及深度学习框架。TensorFlow在...

    Thinking in Java Fourth Edition

    第2 章 一切都是对象 第3 章 控制程序流程 第4 章 初始化和清除 第5 章 隐藏实施过程 第6 章 类再生 第7 章 多形性 第8 章 对象的容纳 第9 章 违例差错控制 第10 章 JAVA IO 系统 第11 章 运行期类型鉴定 第12 章 ...

    CentOS7 MariaDB10(MySql)相关安装配置

    初学,搭建相关环境,使用同样的初学者。 以下是目录结构: 一、 基础准备 4 1. 环境说明 4 2. 基础知识准备 4 二、 安装操作 5 1. 配置源 5 2. 安装 7 3. 完成配置 7 4. HeidiSql 8 三、 MariaDB操作 11 1、 编码...

    IIC通信总结

    I2C(Inter-Integrated Circuit BUS) 集成电路总线,该总线由NXP(原PHILIPS)公司设计,多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。

    windows API大全

    有关于windows API的资料 ,程序员常备工具

    Thinking In Java》中文版

    这本是中文版的。。 此书适合各类人群,学通此书,java无任何疑问

Global site tag (gtag.js) - Google Analytics