WebPartChrome 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
允許開發者僅覆蓋區域中選定區域 WebPart 或伺服器控制 WebPartZoneBase 的渲染。
public ref class WebPartChrome
public class WebPartChrome
type WebPartChrome = class
Public Class WebPartChrome
- 繼承
-
WebPartChrome
範例
以下程式碼範例示範如何利用該WebPartChrome類別覆蓋區域中預設的控制項WebPart渲染WebPartZoneBase。
程式碼範例包含四個部分:
一個使用者控制功能,讓你能在網頁部分頁面上更改顯示模式。
一個網頁,承載了範例中所有控制項。
一個包含自訂 WebPartZoneBase 區域原始碼的類別,以及一個 WebPartChrome 類別。
說明這個例子是如何運作的。
程式碼範例的第一部分是使用者控制。 使用者控制的原始碼來自另一個主題。 為了讓這個程式碼範例運作,你需要從「 攻略:更改網頁部分頁面的顯示模式 」主題中取得使用者控制的 .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 Parts 控制項集中的正常預設行為。 如果 MyZone.RenderVerbsInMenu 屬性值為 false,這是此自訂區域的預設值,動詞會分別以連結形式呈現在每個控制項的標題欄中。 請注意,在宣告元素的網頁程式碼 <aspSample:MyZone> 中,有一個 RenderVerbsInMenu 屬性設定為 true,使動詞會出現在控制項的選單中。 為了嘗試這個功能,你可以將宣告屬性 RenderVerbsInMenu 設為 false,並注意動詞如何以連結形式呈現。
自訂 WebPartChrome 類別會覆蓋多個方法的渲染,而自訂區域則在其方法中建立該 MyWebPartChrome 類別 CreateWebPartChrome 的實例。 這會將自訂渲染套用到頁面上。 要執行程式碼範例,你必須編譯這個原始碼。 你可以明確編譯,並將結果組合放到你網站的 Bin 資料夾或全域組合快取中。 或者,你也可以把原始碼放在網站的App_Code資料夾,執行時會動態編譯。 若想了解如何展示兩種編譯方法,請參見《 攻略:開發與使用自訂網頁伺服器控制法》。
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 Parts Chrome 指的是區域內每個 WebPart 控制項或伺服器控制 WebPartZoneBase 項的周邊使用者介面(UI)元素。 控制項的 Chrome 包含其邊框、標題欄,以及標題列內的圖示、標題文字和動詞選單。 Chrome 的外觀設定在區域層級,並適用於該區域內所有伺服器控制。
Web Parts 控制集使用該 WebPartChrome 類別來渲染控制項的 WebPart Chrome。 此外,此類別提供開發者自訂區域內控制項WebPart任何單一區段(如頁頭或頁尾)WebPartZoneBase的渲染方式,而無需親自處理所有控制項的渲染。 例如,你可以覆寫 CreateWebPartChromeStyle 自訂某些套用到區域的特定 WebPartZoneBase 風格屬性的方法,但其餘部分則可依賴預設渲染來處理。
這個 WebPartChrome 類別包含幾個重要方法,當你想要覆寫控制項的渲染 WebPart 時非常有用。 其中一種是CreateWebPartChromeStyle方法,讓你能更改與Style所用物件相關的樣式屬性WebPartChrome。 另一個是WebPartChrome建構子,當你在自訂CreateWebPartChrome類別中覆寫該WebPartZoneBase方法來建立自訂WebPartChrome物件的實例時,會用它。 另一個有用的方法是 RenderPartContents 方法,你可以用它來控制區域控制區的渲染(相對於像標題、頁尾和標題欄這類 Chrome 元素)。 這個 GetWebPartVerbs 方法允許你排除某些動詞被渲染,如果你不希望使用者在介面中看到這些動詞。 最後,如果你想完全 WebPart 程式化控制項的所有渲染面向,可以覆寫這個 RenderWebPart 方法。
這個 WebPartChrome 類別的幾個性質也很有用。 Zone和 WebPartManager 屬性分別提供物件WebPartChrome相關區域與當前WebPartManager實例的參考。
給繼承者的注意事項
當你想覆蓋伺服器控制某些區域WebPartChrome的預設渲染時,可以繼承該WebPart類別。 你可以選擇性地覆寫方法 CreateWebPartChromeStyle(WebPart, PartChromeType) 、 GetWebPartVerbs(WebPart) 方法,尤其是 RenderPartContents(HtmlTextWriter, WebPart) OR RenderWebPart(HtmlTextWriter, WebPart) 方法,來自訂渲染。 要使用你自訂 WebPartChrome 的區域 WebPart 控制類別,請開發一個由該 WebPartZoneBase 類別衍生的自訂區域,並覆寫其 CreateWebPartChrome() 方法。 關於如何在區域中使用子 WebPartChrome 物件的詳細資訊,請參見範例章節。
建構函式
| 名稱 | Description |
|---|---|
| WebPartChrome(WebPartZoneBase, WebPartManager) |
初始化一個新的控制實例。 |
屬性
| 名稱 | Description |
|---|---|
| DragDropEnabled |
會獲得一個數值,表示控制是否可以拖入或拖出該區域。 |
| WebPartManager |
會得到目前 WebPartManager 實例的參考。 |
| Zone |
會看到相關 WebPartZoneBase 區域的參考。 |
方法
| 名稱 | Description |
|---|---|
| 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) |