WebPartChrome 类

定义

允许开发人员仅重写 WebPart 区域中 WebPartZoneBase 或服务器控件的选定部分的呈现。

public ref class WebPartChrome
public class WebPartChrome
type WebPartChrome = class
Public Class WebPartChrome
继承
WebPartChrome

示例

下面的代码示例演示如何使用WebPartChrome类替代区域中控件WebPartZoneBase的默认呈现WebPart

代码示例包含四个部分:

  • 用户控件,可用于更改Web 部件页面上的显示模式。

  • 承载示例中所有控件的网页。

  • 包含自定义 WebPartZoneBase 区域和 WebPartChrome 类的源代码的类。

  • 有关示例工作原理的说明。

代码示例的第一部分是用户控件。 用户控件的源代码来自另一个主题。 若要使此代码示例正常工作,需要从演练中获取用户控件的 .ascx 文件:更改Web 部件页面主题上的显示模式,并将该文件放置在与本代码示例中的 .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 部件 chrome 是指外围用户界面 (UI) 元素,这些元素框架包含在区域中的每个WebPart控件或服务器控件WebPartZoneBase。 控件的 Chrome 包括其边框、标题栏以及标题栏中显示的图标、标题文本和谓词菜单。 Chrome 的外观在区域级别设置,并应用于该区域中的所有服务器控件。

Web 部件控件集使用WebPartChrome类来呈现控件的WebPart部件版式。 此外,此类为开发人员提供了一种方法,用于自定义任何单个节的呈现 (,例如区域中控件的 WebPart 页眉或页脚) ,而无需处理这些控件 WebPartZoneBase 的所有呈现。 例如,可以重写 CreateWebPartChromeStyle 该方法以自定义应用于 WebPartZoneBase 该区域的某些特定样式属性,但可以依赖默认呈现来处理其余部分。

WebPartChrome 类包含几个重要方法,当想要重写控件的 WebPart 呈现时,这些方法非常有用。 CreateWebPartChromeStyle其中一种方法可用于更改与WebPartChrome用于呈现控件的对象关联的对象的样式属性Style。 另一个WebPartChrome构造函数是在自定义WebPartZoneBase类中重写CreateWebPartChrome方法以创建自定义WebPartChrome对象的实例时使用的。 另一个有用的方法是该方法 RenderPartContents ,可用于控制区域 (控件的内容区域呈现,而不是页眉、页脚和标题栏等部件元素) 。 如果 GetWebPartVerbs 出于某种原因,你不希望用户在 UI 中看到这些谓词,则可以排除呈现某些谓词。 最后,如果要对呈现 WebPart 控件的所有方面进行完整的编程控制,则可以重写 RenderWebPart 该方法。

类的 WebPartChrome 多个属性也很有用。 WebPartManagerZone属性分别提供对与WebPartChrome对象和当前WebPartManager实例关联的区域的引用。

继承者说明

如果要重写某些部分WebPart或服务器控件的默认呈现,请从WebPartChrome类继承。 可以选择性地重写 CreateWebPartChromeStyle(WebPart, PartChromeType) 方法、 GetWebPartVerbs(WebPart) 方法(尤其是 RenderPartContents(HtmlTextWriter, WebPart)RenderWebPart(HtmlTextWriter, WebPart) 方法)来自定义呈现。 若要对区域中的WebPart控件使用自定义WebPartChrome类,请开发派生自该类的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)

适用于

另请参阅