概述

前一篇介绍了Ext.NET基础知识,并对Ext.NET布局进行了简要的说明,本文中我们用一个完整的示例代码来看看Ext.NET的布局。

示例代码下载地址>>>>>


本文目的

本文使用Tree、Grid应该是我们最为常用的控件,实现自适应的页面布局,

顶端:使用Panel,可折叠;

左侧:使用TreePanel,可折叠;

中间:使用GridPanel,主要区域,不可折叠;

底部:使用GridPanel,可折叠;

先看看我们最终实现的效果

整体布局

全部折叠后的效果

当点击gridMain下的新增按钮弹出Window


开始之前


新建WebFrom窗体

新建WebFrom窗体,并在ASPX文件中添加入下代码。

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebFormDemo.Layouts.Default" %>
  2. <!DOCTYPE html>
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head runat="server">
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  6. <title>Ext.Net布局示例</title>
  7. </head>
  8. <body>
  9. <ext:ResourceManager runat="server" />
  10. </body>
  11. </html>

关于<ext:ResourceManager runat="server" />上一篇中已经讲过,它必须在<body></body>中第一行,因为它负责为Web页面添加所需的js和css文件的引用。


一个最简单的页面布局示例

在开始之前,我们先来看看一个最为简单的Viewport页面布局示例

添加CSS样式

为了演示需要我们为每个区域指定不同的背景颜色,在<head></head>添加如下CSS样式

  1. <style type="text/css">
  2. .north {
  3. background-color: #FFFFFF;
  4. }
  5. .west {
  6. background-color: #00FFFF;
  7. }
  8. .center {
  9. background-color: #FF00FF;
  10. }
  11. .sourth {
  12. background-color: #FFFF00;
  13. }
  14. </style>

添加Viewport

我们需要实现的是自适应浏览器窗口大小(占满整个<body></body>),所以使用Viewport,首先在<ext:ResourceManager runat="server" />下面添加如下代码

  1. <ext:Viewport runat="server" Layout="BorderLayout">
  2. </ext:Viewport>

Viewport将自己呈现在<body></body>中,并自动调整自身大小以适应整个浏览器窗口,一个Web页面只允许出现一个Viewport。

关于Viewport的详细说明参见此处

我们将页面分为多个区域,并可以手动调整没个区域的大小,所以,Viewport的属性Layout="BorderLayout";


添加子控件

接着我们为Viewport添加子容器,每个子容器代表一个区域;

  1. <ext:Viewport runat="server" Layout="BorderLayout">
  2. <Items>
  3. <ext:Container runat="server" Region="North" Html="<h2>North</h2>" Cls="north">
  4. </ext:Container>
  5. <ext:Container runat="server" Region="West" Html="<h2>West</h2>" Cls="west">
  6. </ext:Container>
  7. <ext:Container runat="server" Region="Center" Html="<h2>Center</h2>" Cls="center">
  8. </ext:Container>
  9. <ext:Container runat="server" Region="South" Html="<h2>Sourth</h2>" Cls="sourth">
  10. </ext:Container>
  11. </Items>
  12. </ext:Viewport>

运行效果如下

说明

  1. Viewport中的<Items>...</Items>,Items中只能定义Ext.NET提供的控件,而有时候我们需要写一些HTML或ASP.NET自带的控件,请使用'',如<Content><div>...</div></Content>
  2. Container的Region属性指定了自身在Viewport中的位置,Region的值可以为
  • North:顶部;
  • South:底部;
  • East:右边;
  • West:左边;
  • Center:占满剩余的空间,在BorderLayout式布局中,必须有一个控件的Region为Center。

最终的ASPX代码如下

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebFormDemo.Layouts.Default" %>
  2. <!DOCTYPE html>
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head runat="server">
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <title>Ext.Net布局示例</title>
  7. <style type="text/css">
  8. .north {
  9. background-color: #FFFFFF;
  10. }
  11. .west {
  12. background-color: #00FFFF;
  13. }
  14. .center {
  15. background-color: #FF00FF;
  16. }
  17. .sourth {
  18. background-color: #FFFF00;
  19. }
  20. </style>
  21. </head>
  22. <body>
  23. <ext:ResourceManager runat="server" />
  24. <ext:Viewport runat="server" Layout="BorderLayout">
  25. <Items>
  26. <ext:Container runat="server" Region="North" Html="<h2>North</h2>" Cls="north">
  27. </ext:Container>
  28. <ext:Container runat="server" Region="West" Html="<h2>West</h2>" Cls="west">
  29. </ext:Container>
  30. <ext:Container runat="server" Region="Center" Html="<h2>Center</h2>" Cls="center">
  31. </ext:Container>
  32. <ext:Container runat="server" Region="South" Html="<h2>Sourth</h2>" Cls="sourth">
  33. </ext:Container>
  34. </Items>
  35. </ext:Viewport>
  36. </body>
  37. </html>

前面说过,Ext.NET是对ExtJs的封装,它将ASPX页面中的EXT.NET标记代码翻译成ExtJS,我们可以看看它为我们生成的ExtJs(javascript)代码

  1. Ext.net.ResourceMgr.init({
  2. id: "ctl01",
  3. theme: "neptune"
  4. });
  5. Ext.onReady(function () {
  6. Ext.create("Ext.container.Viewport", {
  7. renderTo: Ext.getBody(),
  8. items: [
  9. {
  10. cls: "north",
  11. html: "<h2>North</h2>",
  12. xtype: "container",
  13. region: "north"
  14. },
  15. {
  16. cls: "west",
  17. html: "<h2>West</h2>",
  18. xtype: "container",
  19. region: "west"
  20. },
  21. {
  22. cls: "center",
  23. html: "<h2>Center</h2>",
  24. xtype: "container",
  25. region: "center"
  26. },
  27. {
  28. cls: "sourth",
  29. html: "<h2>Sourth</h2>",
  30. xtype: "container",
  31. region: "south"
  32. }
  33. ],
  34. layout: "border"
  35. });
  36. });

使用浏览器的查看源码功能,若是javascript代码没有格式化,请在Web.config文件中进行如下设置

  1. <extnet theme="Crisp"
  2. scriptMode="Debug"
  3. sourceFormatting="true"
  4. licenseKey="** Ext.NET LICENSE KEY HERE **"
  5. initScriptMode="Linked"/>

详细的设置请参见上一篇中 WEBCONFIG中extnet 配置说明


实现页面布局

代码

上面的简单示例演示了BorderLayout最基本的布局,接着我们来看看一个实例代码。

删除上面为了演示添加的代码,我们最初的页面ASPX代码是这样的

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebFormDemo.Layouts.Default" %>
  2. <!DOCTYPE html>
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head runat="server">
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <title>Ext.Net布局示例</title>
  7. </head>
  8. <body>
  9. <ext:ResourceManager runat="server" />
  10. <ext:Viewport runat="server" Layout="BorderLayout">
  11. <Items>
  12. </Items>
  13. </ext:Viewport>
  14. </body>
  15. </html>

我们在<ext:Viewport><Items>...代码...</Items></ext:Viewport>中分别添加Panel(pnlTop)、TreePanel(pnlLeft)、和两个GridPanel(gridMaingridChild),代码如下

  1. <ext:Viewport runat="server" Layout="BorderLayout">
  2. <Items>
  3. <ext:Panel runat="server" Header="false" ID="pnlTop" Region="North" Html="The North"
  4. BodyPadding="10" CollapseMode="Mini" Collapsible="true" Split="true">
  5. </ext:Panel>
  6. <ext:TreePanel runat="server" Region="West" Flex="1"
  7. Title="LeftTree" HideCollapseTool="true" Collapsible="true"
  8. Split="true" ID="pnlLeft">
  9. <Tools>
  10. <ext:Tool Type="Expand" ToolTip="全部展开">
  11. </ext:Tool>
  12. <ext:Tool Type="Collapse" AlignTarget="" ToolTip="全部折叠">
  13. </ext:Tool>
  14. </Tools>
  15. </ext:TreePanel>
  16. <ext:Container runat="server" Region="Center" Flex="4"
  17. Layout="BorderLayout">
  18. <Items>
  19. <ext:GridPanel runat="server" Title="gridMain" Region="Center" Flex="2">
  20. <DockedItems>
  21. <ext:Toolbar runat="server" Dock="Top">
  22. <Items>
  23. <ext:Button runat="server" ID="btnMainAdd"
  24. Icon="Add" ToolTip="新建">
  25. </ext:Button>
  26. <ext:Button runat="server" ID="btnMainDelete"
  27. Icon="Delete" ToolTip="删除">
  28. </ext:Button>
  29. </Items>
  30. </ext:Toolbar>
  31. <ext:PagingToolbar runat="server" ID="pagMain" Dock="Bottom">
  32. </ext:PagingToolbar>
  33. </DockedItems>
  34. </ext:GridPanel>
  35. <ext:GridPanel runat="server" Title="gridChild" Region="South" Flex="1"
  36. Collapsible="true" CollapseDirection="Bottom" Split="true">
  37. <DockedItems>
  38. <ext:Toolbar runat="server" Dock="Top">
  39. <Items>
  40. <ext:Button runat="server" ID="btnChildAdd" Icon="Add"
  41. ToolTip="新建">
  42. </ext:Button>
  43. <ext:Button runat="server" ID="btnChildDelete" Icon="Delete"
  44. ToolTip="删除">
  45. </ext:Button>
  46. </Items>
  47. </ext:Toolbar>
  48. <ext:PagingToolbar runat="server" ID="pagChild" Dock="Bottom">
  49. </ext:PagingToolbar>
  50. </DockedItems>
  51. </ext:GridPanel>
  52. </Items>
  53. </ext:Container>
  54. </Items>
  55. </ext:Viewport>

实际运行效果如下

我们对每个Panel分别说明


顶部Panel说明(ID="pnlTop")

  • Header="false":隐藏标题栏;
  • Region="North":在父容器的顶端显示;
  • Html="The North":其中要显示的HTML内容,不能和内部的<items></items>同时出现;
  • BodyPadding="10":同CSS的padding,只能为整数;
  • CollapseMode="Mini":折叠方式为Mini,可选项有DefaultHeaderMini,详细说明见此处
  • Collapsible="true":可折叠;
  • Split="true":可改变尺寸,详细说明见此处

由于我们没有对此Panel的高度做任何定义,所以它会根据其内容自动调整默认高度。

关于更多的Panel说明见 此处


左侧TreePanel说明(ID="pnlLeft")

本文只是为了说明布局,所以此处的TreePanel中没有任何内容。


属性说明

  • Region="West":在父容器的左侧显示;
  • Flex="1":一个单位宽度,详细说明见 此处
  • Title="LeftTree":标题栏文字;
  • HideCollapseTool="true":隐藏收缩工具按钮;
  • Collapsible="true":可折叠;
  • Split="true":可改变尺寸,详细说明见此处

Tools说明

  1. <Tools>
  2. <ext:Tool Type="Expand" ToolTip="全部展开">
  3. </ext:Tool>
  4. <ext:Tool Type="Collapse" AlignTarget="" ToolTip="全部折叠">
  5. </ext:Tool>
  6. </Tools>

如上代码表示了TreePanel标题栏右侧的两个按钮,其中ToolTip属性为鼠标悬停时的提示文字。


Center区域说明

如下代码定义了一个Viewport中4个单位宽(Flex="4")的Center区域(Region="Center"),并指明了其子控件也使用Border布局(Layout="BorderLayout");

  1. <ext:Container runat="server" Region="Center" Flex="4"
  2. Layout="BorderLayout">
  3. 省略代码......
  4. </ext:Container>

GridPanel说明

本文只是为了说明布局,所以此处的GridPanel中没有任何内容。

两个GridPanel除了ID和Flex属性不同外,其余属性基本相同。

<DockedItems>...</DockedItems>中定义了两个Dock属性的控件,一个Dock="Top"的Toolbar和Dock="Bottom"的PagingToolbar,从字面意思可以看出一个是工具栏,而另一个是分页工具栏;


添加Window

为了实现弹出编辑,我们需要使用Window控件,在</ext:Viewport></body>之间加入如下代码

  1. <ext:Window runat="server" ID="winMain" Icon="ApplicationEdit" Hidden="true" Collapsible="true"
  2. Constrain="true" MinHeight="400" MinWidth="500" Modal="true" CloseAction="Destroy" Layout="FitLayout">
  3. <Buttons>
  4. <ext:Button runat="server" ID="btnMainSave" Text="保存">
  5. </ext:Button>
  6. <ext:Button runat="server" ID="btnMainCancel" Text="取消">
  7. <Listeners>
  8. <Click Handler="#{winMain}.close();" />
  9. </Listeners>
  10. </ext:Button>
  11. </Buttons>
  12. <Items></Items>
  13. </ext:Window>

Window属性说明

  • Icon="ApplicationEdit":定义Windows的图标,Ext.NET内置了上百个图标;
  • Hidden="true":此Window是隐藏的,因为我们初次打开页面时不需要显示此Window,当编辑或新增时才显示;
  • Collapsible="true":可折叠;
  • Constrain="true":不允许超出父容器的区域,此时其父容器为body,也就意味着此Window不能超出整个Web页面;
  • MinHeight="400" MinWidth="500":最小高度和最小高度;
  • Modal="true":模式窗体方式显示,类似MicroSoft Windows提供的模式窗体方式,这个已经很常见了;
  • CloseAction="Hide":关闭方式为隐藏,可选项有'Destroy'和'Hide',因为我们需要重复利用此Window,而不用每次new一个新的Window,达到重用效果;
  • Layout="FitLayout":其内部采用铺满方式的布局。

Window>Buttons说明

  • <Buttons>...</Buttons>中定义了两个按钮,一个用来保存,一个用来取消,点取消按钮时关闭此Window;
  • <Click Handler="#{winMain}.close();" />中的#{winMain}相当于javascript中的App.winMain,表示winMain的实例对象,Window提供了close方法;一般用 Fn指示javascript中的事件方法名称,而Handler一般用来写一些相对简单的实现代码。

弹出显示Window

我们可以通过服务器端事件(Directevents)来弹出显示Window,也可以使用客户端javascript。

服务器端显示Window示例代码

  1. protected void btnMainAdd_Click(object sender,Ext.Net.DirectEventArgs e)
  2. {
  3. winMain.Show();
  4. }

客户端javascript显示Window示例代码

  1. var btnMainAdd_Click = function(sender,e) {
  2. App.winMain.show();
  3. };

这里我们采用后者,这样减少了一次与服务器端的交互,由于此处的代码很简单(只有一行实际代码),所以我们可以使用Handler方式来写。修改btnMainAdd的代码如下:

  1. <ext:Button runat="server" ID="btnMainAdd"
  2. Icon="Add" ToolTip="新建">
  3. <Listeners>
  4. <Click Handler="#{winMain}.show()" />
  5. </Listeners>
  6. </ext:Button>

这样,当单击gridMain工具栏中的新建按钮时,将弹出winMain,运行效果如下:

接着我们可以在此Window中添加各种文本、数字、日期等控件,编辑/新建实际的数据以存储到实际的数据库中,这个我们放在后面再来细说。


最终代码

最终的ASPX代码如下

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebFormDemo.Layouts.Default" %>
  2. <!DOCTYPE html>
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head runat="server">
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <title>Ext.Net布局示例</title>
  7. </head>
  8. <body>
  9. <ext:ResourceManager runat="server" />
  10. <ext:Viewport runat="server" Layout="BorderLayout">
  11. <Items>
  12. <ext:Panel runat="server" Header="false" ID="pnlTop" Region="North" Html="The North"
  13. BodyPadding="10" CollapseMode="Mini" Collapsible="true" Split="true">
  14. </ext:Panel>
  15. <ext:TreePanel runat="server" Region="West" Flex="1"
  16. Title="LeftTree" HideCollapseTool="true" Collapsible="true"
  17. Split="true" ID="pnlLeft">
  18. <Tools>
  19. <ext:Tool Type="Expand" ToolTip="全部展开">
  20. </ext:Tool>
  21. <ext:Tool Type="Collapse" AlignTarget="" ToolTip="全部折叠">
  22. </ext:Tool>
  23. </Tools>
  24. </ext:TreePanel>
  25. <ext:Container runat="server" Region="Center" Flex="4"
  26. Layout="BorderLayout">
  27. <Items>
  28. <ext:GridPanel runat="server" Title="gridMain" Region="Center" Flex="2">
  29. <DockedItems>
  30. <ext:Toolbar runat="server" Dock="Top">
  31. <Items>
  32. <ext:Button runat="server" ID="btnMainAdd"
  33. Icon="Add" ToolTip="新建">
  34. <Listeners>
  35. <Click Handler="#{winMain}.show()" />
  36. </Listeners>
  37. </ext:Button>
  38. <ext:Button runat="server" ID="btnMainDelete"
  39. Icon="Delete" ToolTip="删除">
  40. </ext:Button>
  41. </Items>
  42. </ext:Toolbar>
  43. <ext:PagingToolbar runat="server" ID="pagMain" Dock="Bottom">
  44. </ext:PagingToolbar>
  45. </DockedItems>
  46. </ext:GridPanel>
  47. <ext:GridPanel runat="server" Title="gridChild" Region="South" Flex="1"
  48. Collapsible="true" CollapseDirection="Bottom" Split="true">
  49. <DockedItems>
  50. <ext:Toolbar runat="server" Dock="Top">
  51. <Items>
  52. <ext:Button runat="server" ID="btnChildAdd" Icon="Add"
  53. ToolTip="新建">
  54. </ext:Button>
  55. <ext:Button runat="server" ID="btnChildDelete" Icon="Delete"
  56. ToolTip="删除">
  57. </ext:Button>
  58. </Items>
  59. </ext:Toolbar>
  60. <ext:PagingToolbar runat="server" ID="pagChild" Dock="Bottom">
  61. </ext:PagingToolbar>
  62. </DockedItems>
  63. </ext:GridPanel>
  64. </Items>
  65. </ext:Container>
  66. </Items>
  67. </ext:Viewport>
  68. <ext:Window runat="server" ID="winMain" Icon="ApplicationEdit" Hidden="true" Collapsible="true"
  69. Constrain="true" MinHeight="400" MinWidth="500" Modal="true" CloseAction="Destroy" Layout="FitLayout">
  70. <Buttons>
  71. <ext:Button runat="server" ID="btnMainSave" Text="保存">
  72. </ext:Button>
  73. <ext:Button runat="server" ID="btnMainCancel" Text="取消">
  74. <Listeners>
  75. <Click Handler="#{winMain}.close();" />
  76. </Listeners>
  77. </ext:Button>
  78. </Buttons>
  79. <Items></Items>
  80. </ext:Window>
  81. </body>
  82. </html>

自2010年的 Coolite 时代开始,几乎所有.NET Web项目中使用 Ext.NET ,这篇文章算是表达对他们的敬意。

  • 转载请注明出处 © guog 2015

Ext.NET-布局篇的更多相关文章

  1. Ext布局篇

      EXT标准布局类 收藏 面板相当于一张干净的白纸,如果直接在上面添加内容,将很难控制面板中内容的显示位置,面板元素越多就越显得凌乱,所以需要在面板上划分不同的区域,将面板内容展示到希望的位置上.E ...

  2. 【Ext.Net学习笔记】02:Ext.Net用法概览、Ext.Net MessageBus用法、Ext.Net布局

    Ext.Net用法概览 Ext.Net还是很强大,如果运用熟练可以极大的提高编程效率.如果你也要学习Ext.Net,原文博主推荐书籍:<Ext.Net Web 应用程序开发教程>,是英文的 ...

  3. react-native 之布局篇

    一.宽度单位和像素密度 react的宽度不支持百分比,设置宽度时不需要带单位,那么默认的单位是什么呢? /** * Sample React Native App * https://github.c ...

  4. Ext.Net 布局

    Ext.Net 布局 Panel布局类有10种:容器布局,自适应布局,折叠布局,卡片式布局,锚点布局,绝对位置布局,表单布局,列布局,表格布局,边框布局       1,Ext.layout.Cont ...

  5. Ext.Net学习笔记04:Ext.Net布局

    ExtJS中的布局功能很强大,常用的布局有border.accordion.fit.hbox.vbox等,Ext.Net除了将这些布局进行封装以外,更是对border进行了一些非常实用的改进,让我们来 ...

  6. 深入css布局篇(3)完结 — margin问题与格式化上下文

    深入css布局(3) - margin问题与格式化上下文      在css知识体系中,除了css选择器,样式属性等基础知识外,css布局相关的知识才是css比较核心和重要的点.今天我们来深入学习一下 ...

  7. 深入css布局篇(2) — 定位与浮动

    深入css布局(2) - 定位与浮动      在css知识体系中,除了css选择器,样式属性等基础知识外,css布局相关的知识才是css比较核心和重要的点.今天我们来深入学习一下css布局相关的知识 ...

  8. Angular Material 教程之布局篇

    Angular Material 教程之布局篇 (一) : 布局简介https://segmentfault.com/a/1190000007215707 Angular Material 教程之布局 ...

  9. 【WPF】 布局篇

    [WPF] 布局篇 一. 几个常用且至关重要的属性 1. Width,Height : 设置窗体,控件宽高. 这里注意,WPF是自适应的, 所以把这2个属性设置 Auto, 则控件宽高会自动改变. 2 ...

随机推荐

  1. Runtime.exec() sucks!!!!

    自己项目中使用到了 Runtime rt = Runtime.getRuntime(); Process p = rt.exec("query session");p.waitFo ...

  2. oracle存储过程--导出数据库表的说明文档

    Oracle查询表的名字和comments select a.table_name,b.comments from user_tables a,ALL_TAB_COMMENTS b where a.t ...

  3. 烂泥:mysql修改本地主机连接

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 在mysql数据库安装完毕后,为了能远程连接管理mysql数据库.我们一般是在mysql服务器上通过update命令来更新user表中的host记录的. ...

  4. Macbook无法上网,访问不了appstore、safria、网易云等,但QQ、谷歌浏览器可以用--解决方案

    ---------------------我是分割线  update 2016-09-22 20:55:22----------------------------- 发现之前那个方法也是不稳定,后来 ...

  5. 004.UDP--拼接UDP数据包,构造ip头和udp头通信(使用原始套接字)

    一.大致流程: 建立一个client端,一个server端,自己构建IP头和UDP头,写入数据(hello,world!)后通过原始套接字(SOCK_RAW)将包发出去. server端收到数据后,打 ...

  6. win7 telnet

    一.telnet连接 1.linux linux下可以通过net stat 查看22端口来确认端口是否开放. 然后在cmd中可通过telnet 10.0.200.151 22来连接. 2.win7 w ...

  7. @Value取不到值引出的spring的2种配置文件applicationContext.xml和xxx-servlet.xml

    项目中经常会用到配置文件,定义成properties的形式比较常见,为了方便使用一般在spring配置文件中做如下配置: <context:property-placeholder ignore ...

  8. Codeforces Round #371 (Div. 2) C. Sonya and Queries[Map|二进制]

    C. Sonya and Queries time limit per test 1 second memory limit per test 256 megabytes input standard ...

  9. HOLOLENS的DEVICE POTAL连接和安装

    首先进入HOLOLENS, SETTINGS -> ADVACEED SETTING (一行小蓝字)点击 里面有它的IP 然后在开发机的浏览器里输入这个IP,会显示证书有误 然后进去后要下载一个 ...

  10. zoj 1610

    Count the Colors Time Limit: 2 Seconds      Memory Limit: 65536 KB Painting some colored segments on ...