WebPartChrome 類別

定義

讓開發人員僅覆寫 WebPart 區域中 WebPartZoneBase 或伺服器控制項之選取區段的呈現。

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

範例

下列程式碼範例示範如何使用 WebPartChrome 類別覆寫區域中控制項 WebPartZoneBase 的預設轉譯 WebPart

程式碼範例有四個部分:

  • 使用者控制項,可讓您變更Web 組件頁面上的顯示模式。

  • 裝載範例中所有控制項的網頁。

  • 類別,包含自訂 WebPartZoneBase 區域和 WebPartChrome 類別的原始程式碼。

  • 範例運作方式的說明。

程式碼範例的第一個部分是使用者控制項。 使用者控制項的原始程式碼來自另一個主題。 若要讓此程式碼範例能夠運作,您必須從逐步解說:變更 Web 組件頁面主題上的顯示模式,並將檔案放在與這個程式碼範例中 .aspx 頁面相同的資料夾中,取得使用者控制項的 .ascx 檔案。

範例的第二個部分是網頁。 請注意,檔案頂端有指示 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>

程式碼範例的第三個 WebPartChrome 部分是自訂 WebPartZoneBase 區域和類別的來源。 在自訂區域類別的建構函式中,程式碼會檢查 MyZone.RenderVerbsInMenu 屬性。 如果值為 true ,動詞會呈現在區域中每個 WebPart 控制項的功能表中。 這是Web 組件控制項集中的一般預設行為。 MyZone.RenderVerbsInMenu如果屬性值為 false ,這是這個自訂區域中的預設值,動詞會個別轉譯為每個控制項標題列中的連結。 請注意,在宣告元素 <aspSample:MyZone> 的網頁程式碼中,有設定 RenderVerbsInMenutrue 的屬性,如此動詞就會出現在控制項的功能表中。 若要實驗這項功能,您可以將宣告式 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 Chrome。 此外,這個類別提供一種方式,讓開發人員自訂任何個別區段的轉譯 (,例如區域中控制項 WebPartZoneBaseWebPart 頁首或頁尾) ,而不需要處理這些控制項的所有轉譯。 例如,您可以覆寫 CreateWebPartChromeStyle 方法來自訂套用至 WebPartZoneBase 區域的某些特定樣式屬性,但您可以依賴預設轉譯來處理其餘部分。

類別 WebPartChrome 包含數個重要方法,當您想要覆寫控制項的 WebPart 轉譯時,這些方法很有用。 其中一個是 CreateWebPartChromeStyle 方法,可讓您變更與用來轉譯控制項之物件相關聯的 WebPartChrome 物件的樣式屬性 Style 。 另一個是 WebPartChrome 建構函式,當您覆寫 CreateWebPartChrome 自訂 WebPartZoneBase 類別中的 方法以建立自訂 WebPartChrome 物件的實例時,會使用這個建構函式。 另一個實用的方法是 方法 RenderPartContents ,您可以用來控制區域控制項內容區域的轉譯 (,而不是頁首、頁尾和標題列等 chrome 元素) 。 如果基於某些原因,您不想讓使用者在 UI 中看到這些動詞,此方法 GetWebPartVerbs 可讓您排除某些動詞。 最後,如果您想要完整以程式設計方式控制轉譯 WebPart 控制項的所有層面,您可以覆寫 RenderWebPart 方法。

類別 WebPartChrome 的數個屬性也很有用。 ZoneWebPartManager 屬性分別提供與 物件和目前 WebPartManager 實例相關聯 WebPartChrome 之區域的參考。

給繼承者的注意事項

當您想要覆寫或伺服器控制項之特定區段 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)

取得 Web 網頁中呈現的 WebPartChrome 物件用戶端識別碼。

GetWebPartTitleClientID(WebPart)

取得包含 WebPart 控制項標題之表格儲存格的用戶端識別碼。

GetWebPartVerbs(WebPart)

取得應使用 WebPart 控制項呈現的動詞命令集合。

MemberwiseClone()

建立目前 Object 的淺層複製。

(繼承來源 Object)
PerformPreRender()

執行必須在呈現 WebPart 控制項之前完成的工作。

RenderPartContents(HtmlTextWriter, WebPart)

呈現 WebPart 控制項的主要內容區域,但不包括頁首和頁尾。

RenderWebPart(HtmlTextWriter, WebPart)

呈現完整的 WebPart 控制項及其所有區段。

ToString()

傳回代表目前物件的字串。

(繼承來源 Object)

適用於

另請參閱