WebPartChrome 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
允许开发人员仅重写 WebPart 区域中 WebPartZoneBase 或服务器控件的选定部分的呈现。
public ref class WebPartChrome
public class WebPartChrome
type WebPartChrome = class
Public Class WebPartChrome
- 继承
-
WebPartChrome
示例
下面的代码示例演示如何使用 WebPartChrome 类替代区域中控件WebPartZoneBase的默认呈现WebPart。
该代码示例包含四个部分:
一个用户控件,可用于更改 Web 部件页上的显示模式。
承载示例中所有控件的网页。
一个类,其中包含自定义 WebPartZoneBase 区域和类的 WebPartChrome 源代码。
示例工作原理的说明。
代码示例的第一部分是用户控件。 用户控件的源代码来自另一个主题。 若要使此代码示例正常工作,需要从 演练:更改 Web 部件页上的显示模式 主题中获取用户控件的 .ascx 文件,并将文件放置在此代码示例中.aspx页所在的文件夹中。
该示例的第二部分是网页。 请注意,文件顶部附近有一个 Register
指令用于注册已编译的组件和标记前缀。 另请注意,该页使用 元素 <aspSample:MyZone>
引用自定义区域,并在区域中包含多个标准 ASP.NET 服务器控件。 服务器控件不实现任何实际功能;此处使用它们只是为了说明类功能如何 WebPartChrome 应用于呈现区域。 请注意,这些服务器控件虽然不是实际 WebPart 控件,但它们在运行时通过 ASP.NET) 对象 GenericWebPart 自动包装 (,因此它们的功能与控件相同 WebPart 。
<%@ Page Language="C#" %>
<%@ Register TagPrefix="uc1"
TagName="DisplayModeMenuCS"
Src="~/DisplayModeMenuCS.ascx" %>
<%@ Register TagPrefix="aspSample"
Namespace="Samples.AspNet.CS.Controls"
Assembly="MyChromeCS" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>ASP.NET Example</title>
</head>
<body>
<form id="form1" runat="server">
<asp:WebPartManager ID="WebPartManager1" runat="server" />
<uc1:DisplayModeMenuCS id="menu1" runat="server" />
<aspSample:MyZone ID="WebPartZone1" runat="server"
RenderVerbsInMenu="true">
<PartTitleStyle Font-Bold="true"
BorderWidth="1"
BackColor="lightblue"/>
<ZoneTemplate>
<asp:Panel runat="server" id="panel1"
title="Vote on Issues" >
<asp:RadioButtonList ID="RadioButtonList1" runat="server" >
<asp:ListItem Value="1">Issue 1</asp:ListItem>
<asp:ListItem Value="2">Issue 2</asp:ListItem>
<asp:ListItem Value="3">Issue 3</asp:ListItem>
</asp:RadioButtonList>
<asp:Button ID="Button1" runat="server" Text="Cast Vote" />
</asp:Panel>
<asp:FileUpload ID="FileUpload1" runat="server"
title="Upload Files" />
</ZoneTemplate>
</aspSample:MyZone>
<asp:WebPartZone ID="WebPartZone2" runat="server" />
<asp:EditorZone ID="EditorZone1" runat="server">
<ZoneTemplate>
<asp:AppearanceEditorPart ID="AppearanceEditorPart1" runat="server" />
</ZoneTemplate>
</asp:EditorZone>
</form>
</body>
</html>
<%@ Page Language="vb" %>
<%@ Register TagPrefix="uc1"
TagName="DisplayModeMenuVB"
Src="~/DisplayModeMenuVB.ascx" %>
<%@ Register TagPrefix="aspSample"
Namespace="Samples.AspNet.VB.Controls"
Assembly="MyChromeVB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>ASP.NET Example</title>
</head>
<body>
<form id="form1" runat="server">
<asp:WebPartManager ID="WebPartManager1" runat="server" />
<uc1:DisplayModeMenuVB id="menu1" runat="server" />
<aspSample:MyZone ID="WebPartZone1" runat="server"
RenderVerbsInMenu="true">
<PartTitleStyle Font-Bold="true"
BorderWidth="1"
BackColor="lightblue"/>
<ZoneTemplate>
<asp:Panel runat="server" id="panel1"
title="Vote on Issues" >
<asp:RadioButtonList ID="RadioButtonList1" runat="server" >
<asp:ListItem Value="1">Issue 1</asp:ListItem>
<asp:ListItem Value="2">Issue 2</asp:ListItem>
<asp:ListItem Value="3">Issue 3</asp:ListItem>
</asp:RadioButtonList>
<asp:Button ID="Button1" runat="server" Text="Cast Vote" />
</asp:Panel>
<asp:FileUpload ID="FileUpload1" runat="server"
title="Upload Files" />
</ZoneTemplate>
</aspSample:MyZone>
<asp:WebPartZone ID="WebPartZone2" runat="server" />
<asp:EditorZone ID="EditorZone1" runat="server">
<ZoneTemplate>
<asp:AppearanceEditorPart ID="AppearanceEditorPart1" runat="server" />
</ZoneTemplate>
</asp:EditorZone>
</form>
</body>
</html>
代码示例的第三部分是自定义 WebPartZoneBase 区域和 WebPartChrome 类的源。 在自定义区域类的构造函数中,代码将检查 MyZone.RenderVerbsInMenu
属性。 如果值为 true
,则谓词将呈现在区域中每个控件的 WebPart 菜单中。 这是 Web 部件控件集中的正常默认行为。
MyZone.RenderVerbsInMenu
如果属性值为 false
,这是此自定义区域中的默认值,则谓词将单独呈现为每个控件的标题栏中的链接。 请注意,在声明 元素的网页代码 <aspSample:MyZone>
中,有一个 RenderVerbsInMenu
属性设置为 true
,以便谓词将显示在控件上的菜单中。 若要试用此功能,可以将声明性 RenderVerbsInMenu
属性设置为 false
,并注意谓词如何呈现为链接。
自定义WebPartChrome类会覆盖多个方法上的呈现,自定义区域在其CreateWebPartChrome方法中创建 类的MyWebPartChrome
实例。 这会将自定义呈现应用于页面。 若要运行代码示例,必须编译此源代码。 可以显式编译它,并将生成的程序集放入网站的 Bin 文件夹或全局程序集缓存中。 或者,可以将源代码放入站点的“App_Code”文件夹中,并在运行时动态编译源代码。 有关演示这两种编译方法的演练,请参阅 演练:开发和使用自定义 Web 服务器控件。
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Security.Permissions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
namespace Samples.AspNet.CS.Controls
{
[AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level = AspNetHostingPermissionLevel.Minimal)]
public class MyZone : WebPartZone
{
private Boolean _renderVerbsInMenu;
protected override WebPartChrome CreateWebPartChrome()
{
WebPartChrome theChrome = new MyWebPartChrome(this,
this.WebPartManager);
if (RenderVerbsInMenu)
this.WebPartVerbRenderMode = WebPartVerbRenderMode.Menu;
else
this.WebPartVerbRenderMode = WebPartVerbRenderMode.TitleBar;
return theChrome;
}
public Boolean RenderVerbsInMenu
{
get { return _renderVerbsInMenu; }
set { _renderVerbsInMenu = value; }
}
}
[AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level = AspNetHostingPermissionLevel.Minimal)]
public class MyWebPartChrome : WebPartChrome
{
WebPartZoneBase theZone;
WebPartManager theManager;
public MyWebPartChrome(WebPartZoneBase aZone, WebPartManager aManager) :
base(aZone, aManager)
{
theZone = aZone;
theManager = aManager;
}
protected override WebPartVerbCollection GetWebPartVerbs(WebPart webPart)
{
ArrayList verbSet = new ArrayList();
foreach (WebPartVerb verb in base.GetWebPartVerbs(webPart))
{
if (verb.Text != "Close")
verbSet.Add(verb);
}
WebPartVerbCollection reducedVerbSet =
new WebPartVerbCollection(verbSet);
return reducedVerbSet;
}
protected override Style CreateWebPartChromeStyle(WebPart part,
PartChromeType chromeType)
{
Style finalStyle = new Style();
finalStyle.CopyFrom(base.CreateWebPartChromeStyle(part, chromeType));
finalStyle.Font.Name = "Verdana";
return finalStyle;
}
protected override void RenderPartContents(HtmlTextWriter writer,
WebPart part)
{
if (part == this.WebPartManager.SelectedWebPart)
HttpContext.Current.Response.Write("<span>Not rendered</span>");
else
if(this.Zone.GetType() == typeof(MyZone))
part.RenderControl(writer);
}
}
}
Imports System.Collections
Imports System.ComponentModel
Imports System.Drawing
Imports System.Security.Permissions
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Namespace Samples.AspNet.VB.Controls
<AspNetHostingPermission(SecurityAction.Demand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
<AspNetHostingPermission(SecurityAction.InheritanceDemand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
Public Class MyZone
Inherits WebPartZone
Private _renderVerbsInMenu As Boolean
Protected Overrides Function CreateWebPartChrome() As WebPartChrome
Dim theChrome As WebPartChrome = _
New MyWebPartChrome(Me, Me.WebPartManager)
If RenderVerbsInMenu Then
Me.WebPartVerbRenderMode = WebPartVerbRenderMode.Menu
Else
Me.WebPartVerbRenderMode = WebPartVerbRenderMode.TitleBar
End If
Return theChrome
End Function
Public Property RenderVerbsInMenu() As Boolean
Get
Return _renderVerbsInMenu
End Get
Set(ByVal value As Boolean)
_renderVerbsInMenu = value
End Set
End Property
End Class
<AspNetHostingPermission(SecurityAction.Demand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
<AspNetHostingPermission(SecurityAction.InheritanceDemand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
Public Class MyWebPartChrome
Inherits WebPartChrome
Dim theManager As WebPartManager
Dim theZone As WebPartZoneBase
Public Sub New(ByVal aZone As WebPartZoneBase, _
ByVal aManager As WebPartManager)
MyBase.New(aZone, aManager)
theManager = aManager
theZone = aZone
End Sub
Protected Overrides Function GetWebPartVerbs _
(ByVal webPart As WebPart) As WebPartVerbCollection
Dim verbSet As New ArrayList()
Dim verb As WebPartVerb
For Each verb In MyBase.GetWebPartVerbs(webPart)
If verb.Text <> "Close" Then
verbSet.Add(verb)
End If
Next verb
Dim reducedVerbSet As WebPartVerbCollection = _
New WebPartVerbCollection(verbSet)
Return reducedVerbSet
End Function
Protected Overrides Function CreateWebPartChromeStyle _
(ByVal part As WebPart, ByVal chromeType As PartChromeType) As Style
Dim finalStyle As New Style()
finalStyle.CopyFrom(MyBase.CreateWebPartChromeStyle(Part, chromeType))
finalStyle.Font.Name = "Verdana"
Return finalStyle
End Function
Protected Overrides Sub RenderPartContents _
(ByVal writer As HtmlTextWriter, ByVal part As WebPart)
If part Is Me.WebPartManager.SelectedWebPart Then
HttpContext.Current.Response.Write("<span>Not rendered</span>")
Else
If (Me.Zone.GetType() Is GetType(MyZone)) Then
part.RenderControl(writer)
End If
End If
End Sub
End Class
End Namespace
在浏览器中加载网页时,可以看到类源代码 MyWebPartChrome
中所做的各种样式和其他呈现自定义项在区域中呈现的 WebPart 控件上的显示方式。
注解
Web 部件部件版式是指外围用户界面 (UI) 元素来构建区域中包含的WebPartZoneBase每个WebPart控件或服务器控件。 控件的版式包括其边框、标题栏以及标题栏中显示的图标、标题文本和谓词菜单。 Chrome 的外观在区域级别设置,并应用于该区域中的所有服务器控件。
Web 部件控件集使用 WebPartChrome 类来呈现控件的 WebPart 版式。 此外,此类为开发人员提供了一种自定义任何单个节 (的呈现的方法,例如区域中控件WebPartZoneBase的WebPart页眉或页脚) ,而无需处理这些控件的所有呈现。 例如,可以重写 CreateWebPartChromeStyle 方法以自定义应用于 WebPartZoneBase 区域的某些特定样式属性,但可以依赖默认呈现来处理其余内容。
类 WebPartChrome 包含几个重要方法,在想要替代控件的 WebPart 呈现时,这些方法非常有用。 一种是 CreateWebPartChromeStyle 方法,它使你能够更改与用于呈现控件的对象WebPartChrome关联的对象的样式属性Style。 另一个是WebPartChrome构造函数,在自定义WebPartZoneBase类中重写 CreateWebPartChrome 方法以创建自定义对象的实例WebPartChrome时使用该构造函数。 另一种有用的方法是 RenderPartContents 方法,可用于控制区域 (中控件的内容区域的呈现,而不是页眉、页脚和标题栏等 chrome 元素) 。 GetWebPartVerbs如果出于某种原因,你不希望用户在 UI 中看到这些谓词,则 使用 方法可以排除呈现某些谓词。 最后,如果希望对呈现控件的所有方面进行完全编程控制 WebPart ,可以重写 RenderWebPart 方法。
类的 WebPartChrome 多个属性也很有用。 Zone和 WebPartManager 属性分别提供对与 WebPartChrome 对象和当前WebPartManager实例关联的区域的引用。
继承者说明
如果要重写某些部分WebPart或服务器控件的默认呈现,请从 WebPartChrome 类继承。 可以选择重写 CreateWebPartChromeStyle(WebPart, PartChromeType) 方法、 GetWebPartVerbs(WebPart) 方法(尤其是 RenderPartContents(HtmlTextWriter, WebPart) 或 RenderWebPart(HtmlTextWriter, WebPart) 方法)以自定义呈现。 若要将自定义 WebPartChrome 类用于区域中的 WebPart 控件,请开发派生自 类的 WebPartZoneBase 自定义区域,并重写其 CreateWebPartChrome() 方法。 有关如何在区域中使用子 WebPartChrome 对象的详细信息,请参阅示例部分。
构造函数
WebPartChrome(WebPartZoneBase, WebPartManager) |
初始化控件的新实例。 |
属性
DragDropEnabled |
获取指示是否可以将控件拖入和拖出区域的值。 |
WebPartManager |
获取对当前 WebPartManager 实例的引用。 |
Zone |
获取对关联的 WebPartZoneBase 区域的引用。 |
方法
CreateWebPartChromeStyle(WebPart, PartChromeType) |
创建样式对象,该对象为 WebPart 对象呈现的每个 WebPartChrome 控件提供样式特性。 |
Equals(Object) |
确定指定对象是否等于当前对象。 (继承自 Object) |
FilterWebPartVerbs(WebPartVerbCollection, WebPart) |
基于开发人员提供的条件,从呈现中排除特定谓词。 |
GetHashCode() |
作为默认哈希函数。 (继承自 Object) |
GetType() |
获取当前实例的 Type。 (继承自 Object) |
GetWebPartChromeClientID(WebPart) |
获取网页中呈现的 WebPartChrome 对象的客户端 ID。 |
GetWebPartTitleClientID(WebPart) |
获取表单元格的客户端 ID,该表单元格包含 WebPart 控件的标题。 |
GetWebPartVerbs(WebPart) |
获取应使用 WebPart 控件呈现的谓词的集合。 |
MemberwiseClone() |
创建当前 Object 的浅表副本。 (继承自 Object) |
PerformPreRender() |
执行在呈现 WebPart 控件之前必须完成的任务。 |
RenderPartContents(HtmlTextWriter, WebPart) |
呈现 WebPart 控件的主要内容区域,不包括页眉和页脚。 |
RenderWebPart(HtmlTextWriter, WebPart) |
呈现完整的 WebPart 控件及其所有部分。 |
ToString() |
返回表示当前对象的字符串。 (继承自 Object) |