共用方式為


WebPartChrome 類別

定義

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

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

範例

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

程式代碼範例有四個部分:

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

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

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

  • 範例運作方式的說明。

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

範例的第二個部分是網頁。 請注意,檔案頂端有指示 Register 詞可註冊已編譯的元件和標籤和標籤前置詞。 另請注意,頁面會使用 元素 <aspSample:MyZone> 參考自定義區域,並在區域內包含數個標準 ASP.NET 伺服器控制件。 伺服器控制項不會實作任何實際功能;它們只用來說明類別功能如何 WebPartChrome 套用至轉譯區域。 請注意,這些伺服器控件雖然不是實際 WebPart 控件,但是每個控件都會在運行時間使用 對象自動 GenericWebPart 包裝 (ASP.NET) ,因此它們的功能與控件相同 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

備註

網頁元件 Chrome 是指周邊使用者介面 (UI) 元素,這些元素會框住區域中的每個 WebPart 控件或伺服器控制件 WebPartZoneBase 。 控件的 Chrome 包含其框線、標題列,以及出現在標題列內的圖示、標題文字和動詞功能表。 Chrome 的外觀是在區域層級設定,並套用至區域中的所有伺服器控制項。

網頁元件控件集會使用 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)

適用於

另請參閱