当前位置:
文档之家› 第3章 主题、用户控件和母版页
第3章 主题、用户控件和母版页
3.2.2 创建用户控件的方法
创建用户控件的步骤如下所述。 (1) 先创建一个网站。 (2) 右击网站中某个目录,选择【添加新项】,并在打开的对话框中选择 【Web用户控件】,然后确定用户控件的名称,再单击【打开】按钮。 (3) 从【工具箱】中将控件添加到Web用户控件中。其中凡是希望用服务 器编程方式访问的控件都必须是服务器端控件。 (4) 为各控件设置属性或编写事件代码。 (5) 给用户控件进行编译。方法是先选择用户控件名,然后选择【生成】| 【生成页】命令以便完成编译工作。
用户控件文件的扩展名为 .ascx而不是.aspx;代码的分离(隐藏)文件的 扩展名是.ascx.cs而不是.aspx.cs; 在用户控件中不能包含 <HTML>、<BODY>和<FORM>等HTML语言 的标记; 用户控件可以单独编译,但不能单独运行。只有将用户控件嵌入到.aspx 文件中时,才能和网页一起运行。 除此以外,用户控件与网页非常相似。
(4) 在应用程序中添加多个Web Form(网页),用于显示各种不同的内容。 (5) 然后通过HyperLink的NavigateUrl属性分别与各窗体链接。 (6) 如果需要,可双击【查询】按钮,在代码隐藏文件中编写查询程序。最后选择【生 成】菜单,再选择【生成页】命令,以编译用户控件。
3.2.4 代码分析
进入的【源】视图,可以看见用户控件的相关代码如下: <%@ Register TagPrefix="uc1" TagName="WebUserControl1" Src="WebUserControl1.ascx" %> <body > <form id="Form1" method="post" runat="server"> <uc1:WebUserControl1 id="WebUserControl11" runat="server"></uc1:WebUserControl1> </form> </body> 代码中粗体为用户控件的相关部分。其中语句: <%@ Register TagPrefix="uc1" TagName="WebUserControl1" Src="WebUserControl1.ascx" %> 代表用户控件已经在.aspx中注册。语句中各个标记的含义如下。
3.2 用 户 控 件
3.2.1 3.2.2 3.2.3 3.2.4 3.2.5
什么是用户控件 创建用户控件的方法 使用用户控件 代码分析 将Web窗体页转换为用户控件
ቤተ መጻሕፍቲ ባይዱ
3.2.1 什么是用户控件
用户控件(User Control)是一种自定义的组合控件,通常由系统提供的 可视化控件组合而成。在用户控件中不仅可以定义显示界面,还可以编 写事件处理代码。当多个网页中包括有部分相同的用户界面时,可以将 这些相同的部分提取出来,做成用户控件。 一个网页中可以放置多个用户控件。通过使用用户控件不仅可以减少编 写代码的重复劳动,还可以使得多个网页的显示风格一致。更为重要的 是,一旦需要改变这些网页的显示界面时,只需要修改用户控件本身, 经过编译后,所有网页中的用户控件都会自动跟随变化。 用户控件本身就相当于一个小型的网页,同样可以为它选择单文件模式 或者代码分离模式。然而用户控件与网页之间还是存在着一些区别,这 些区别包括:
3.1.3 同一控件多种定义的方法
程序运行中三个TextBox控件分别显示不同的风格。情况如图3.3所示。 实际上每个常用服务器控件的属性窗口中都有一个SkinID属性,通过该属 性的下拉列表可以直接确定在皮肤文件中的选项。
图3.3 不同定义下的三个TextBox控件
3.1.4 将主题文件应用于整个应用程序
3.1.3 同一控件多种定义的方法
其中第一个定义为默认的定义,中间不包括SkinID。该定义将作用于所有不注明 SkinID的TextBox控件。第二和第三个定义中都包括SkinID属性,这些定义只能作 用于SkinID相同的TextBox控件。 在网页中为了使用主题,应该做出相应的定义。例如: <form id="form1" runat="server"> <asp:TextBox id="TextBox1" Runat="Server" /> <br /> <asp:TextBox id="TextBox2" SkinID="BlueTextBox" Runat="Server" /> <br />图3.3 不同定义下的三个 TextBox控件 <asp:TextBox id="TextBox3" SkinID="RedTextBox" Runat="Server" /> </form>
TagPrefix:代表用户控件的命名空间(这里是uc1),它是用户控件名称的前缀。如果 在一个.aspx网页中使用了多个用户控件,而且在不同的用户控件中出现了控件重名的 现象时,命名空间是用来区别它们的标志。 TagName:是用户控件的名称,它与命名空间一起来惟一标识用户控件,如代码中的 “uc1:WebUserControl1”。 Src:用来指明用户控件的虚拟路径。
3.1.2 创建主题的方法
系统为创建主题制定了一些规则,但没有提供什么特殊的工具。这些规则是:对控件显示属性的定 义必须放在以“.skin”为后缀的皮肤文件中,而皮肤文件必须放在“主题目录”下,而主题目录又 必须放在专用目录App_Themes的下面。每个专用目录下可以放多个主题目录;每个主题目录下面 可以放多个皮肤文件。只有遵守这些规定,在皮肤文件中定义的显示属性才能够起作用。 下面举例说明创建的过程。 (1) 右击网站名,选择【添加文件夹】命令,然后选择【主题文件夹】项,系统将会在应用程序 的根目录下自动生成一个专用目录App_Themes,并且在这个专用目录下放置主题文件夹,这里给 文件夹取名为Themes1。 (2) 右击主题文件夹名,在弹出的菜单中选择【外观文件】。 (3) 弹出一皮肤文件的框架,可以给该文件改名,但是文件的后缀必须是“.skin”,这里取名为 SkinFile.skin。 专用目录、主题目录、皮肤文件三者之间的关系如图3.1所示。 (4) 在皮肤文件(这里是SkinFile.skin)中给TextBox和Button两种控件定义显示的语句如下。 <asp:TextBox BackColor = "Orange" ForeColor = "DarkGreen" Runat = "server" /> <asp:Button BackColor = "Orange" ForeColor = "DarkGreen" Font-Bold = "true" Runat= "server" />
3.1.2 创建主题的方法
文件中将两种控件的背景色都定义成Orange,前景色定义成DarkGreen。对Button 控件的字 体定义成粗体。 值得注意的是,有的控件(如LoginView、User Control等)不能用skin文件定义外貌。能够定义 的控件也只能定义它们的外貌属性,其他行为属性(如AutoPostBack属性等)不能在这里定义。 (5) 在同一个主题目录下,不管定义了多少个皮肤文件,系统都会自动将它们合并成为一个文 件。 (6) 项目中凡需要使用本主题的网页,都需要在网页的定义语句增加“Theme = [主题目录]” 的属性,例如: <%@ Page Theme="Themes1"… %> 在设计阶段,并看不出皮肤文件中定义的作用,只有当程序运行时,在浏览器中才能够看到控件 外貌的变化。图3.2就是TextBox和Button控件在上述定义中显示的界面。
<asp:TextBox SkinID="BlueTextBox" BackColor="Blue" Runat="Server" />
<asp:TextBox SkinID="RedTextBox" BackColor="Red" Runat="Server" />
6个HyperLink控件,将它们的Text属性分别设成“新闻”“娱乐”等; 4个Image以及4个Label控件,分别选择各自的图标,标上“保存”“下载”等; 1个TextBox文本框和1个“查询”按钮。
图3.4 用户控件示例
3.2.3 使用用户控件
用户控件只能在同一应用程序的网页中共享。就是说,应用项目的多个 网页中可以使用相同的用户控件,而每一个网页可以使用多种不同的用 户控件。如果一个网页中需要使用多个用户控件时,最好先进行布局。 然后再将用户控件分别拖到相应的位置。 在设计阶段,有的用户控件并不会充分展开,而是被压缩成小长方形, 此时它只起占位的作用。程序运行时才会自动展开。
图3.1 专用目录、主题目录和皮肤文件的关系
图3.2 用皮肤文件定义控件的外貌