WebPartChrome 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
使开发人员能够仅覆盖区域中所选部分或服务器控件的WebPartWebPartZoneBase呈现。
public ref class WebPartChrome
public class WebPartChrome
type WebPartChrome = class
Public Class WebPartChrome
- 继承
-
WebPartChrome
示例
下面的代码示例演示如何使用WebPartChrome类替代区域中控件WebPart的默认呈现WebPartZoneBase。
代码示例包含四个部分:
允许用户在 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类会覆盖多个方法的呈现,自定义区域在其MyWebPartChrome方法中创建类的CreateWebPartChrome实例。 这会将自定义呈现应用于页面。 若要运行代码示例,必须编译此源代码。 可以显式编译它,并将生成的程序集放入网站的 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)元素,这些元素可框架区域中包含的WebPart每个WebPartZoneBase控件或服务器控件。 控件的部件版式包括其边框、标题栏以及标题栏中显示的图标、标题文本和谓词菜单。 部件版式的外观在区域级别设置,并应用于该区域中的所有服务器控件。
Web 部件控件集使用 WebPartChrome 类来呈现控件的 WebPart 部件版式。 此外,此类为开发人员提供了一种方法来自定义区域中控件WebPart的任何单独节(如页眉或页脚)的WebPartZoneBase呈现,而无需处理这些控件的所有呈现。 例如,可以重写 CreateWebPartChromeStyle 该方法以自定义应用于 WebPartZoneBase 该区域的某些特定样式属性,但可以依赖默认呈现来处理其余部分。
类 WebPartChrome 包含几个重要方法,当你想要重写控件的 WebPart 呈现时,这些方法非常有用。 CreateWebPartChromeStyle其中一种方法可用于更改与用于呈现控件的对象关联的Style对象的样式属性WebPartChrome。 另一个构造函数是WebPartChrome重写自定义CreateWebPartChrome类中的方法以创建自定义WebPartZoneBase对象的实例时WebPartChrome使用的构造函数。 另一个有用的方法是该方法 RenderPartContents ,可用于控制区域中控件内容区域的呈现(与页眉、页脚和标题栏等部件元素相反)。 如果 GetWebPartVerbs 出于某种原因,不希望用户在 UI 中看到这些谓词,则该方法允许你排除呈现某些谓词。 最后,如果要对呈现 WebPart 控件的所有方面进行完整的编程控制,则可以重写该方法 RenderWebPart 。
类的 WebPartChrome 多个属性也很有用。 这些 Zone 属性 WebPartManager 分别提供对与 WebPartChrome 对象和当前 WebPartManager 实例关联的区域的引用。
继承者说明
如果要重写某些部分WebPartChrome或服务器控件的默认呈现,请继承自WebPart该类。 可以选择性地重写 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) |
获取在网页中呈现的对象客户端 ID WebPartChrome 。 |
| GetWebPartTitleClientID(WebPart) |
获取包含控件标题的表单元格的 WebPart 客户端 ID。 |
| GetWebPartVerbs(WebPart) |
获取应使用 WebPart 控件呈现的谓词的集合。 |
| MemberwiseClone() |
创建当前 Object的浅表副本。 (继承自 Object) |
| PerformPreRender() |
执行在呈现 WebPart 控件之前必须完成的任务。 |
| RenderPartContents(HtmlTextWriter, WebPart) |
呈现控件的主要内容区域 WebPart ,不包括页眉和页脚。 |
| RenderWebPart(HtmlTextWriter, WebPart) |
呈现包含其所有部分的完整 WebPart 控件。 |
| ToString() |
返回一个表示当前对象的字符串。 (继承自 Object) |