WebPartChrome クラス
アセンブリ: System.Web (system.web.dll 内)


Web パーツ クロムとは、各 WebPart コントロールまたは WebPartZoneBase ゾーン内に含まれるサーバー コントロールの周囲に表示する周辺ユーザー インターフェイス (UI) 要素のことです。コントロールのクロムには、境界線、タイトル バー、アイコン、タイトル テキストがあり、さらにはタイトル バーに表示される動詞メニューも含まれます。クロムの外観は、ゾーン レベルに対して設定され、ゾーン内のすべてのサーバー コントロールに適用されます。
Web パーツ コントロール セットは、WebPartChrome クラスを使用して WebPart コントロールのクロムを表示します。さらに、このクラスを使用すると、開発者は、WebPartZoneBase ゾーン内の WebPart コントロールのすべての表示を処理しなくても、個別のセクション (ヘッダーやフッターなど) の表示をカスタマイズできます。たとえば、CreateWebPartChromeStyle メソッドをオーバーライドして WebPartZoneBase ゾーンに適用された特定のスタイル属性の一部をカスタマイズし、それ以外の部分については既定の表示を利用することが可能です。
WebPartChrome クラスには、WebPart コントロールの表示をオーバーライドする場合に役立つ複数の重要なメソッドが含まれています。その 1 つは、CreateWebPartChromeStyle メソッドです。このメソッドにより、コントロールの表示に使用する WebPartChrome オブジェクトに関連付けられた Style オブジェクトのスタイル属性を変更できます。 もう 1 つは、WebPartChrome コンストラクタです。このコンストラクタは、カスタム WebPartZoneBase クラスの CreateWebPartChrome メソッドをオーバーライドして、カスタム WebPartChrome オブジェクトのインスタンスを作成する場合に使用します。 また RenderPartContents メソッドも役立ちます。このメソッドは、 ヘッダー、フッター、タイトル バーなどのクロム要素とは異なるように、ゾーン内の コントロールのコンテンツ領域の表示を制御する場合に使用できます。GetWebPartVerbs メソッドを使用すると、何らかの理由で特定の動詞を UI としてユーザーに表示しない場合、それらの動詞を表示対象から除外できます。最後に、WebPart コントロールの表示のあらゆる要素をプログラムで完全に制御する場合には、RenderWebPart メソッドをオーバーライドできます。
WebPartChrome クラスのいくつかのプロパティも便利です。Zone プロパティは WebPartChrome オブジェクトに関連付けられたゾーンへの参照を提供し、WebPartManager プロパティは、現在の WebPartManager インスタンスへの参照を提供します。
継承時の注意 WebPart の特定のセクションまたはサーバー コントロールの既定の表示をオーバーライドする場合は、WebPartChrome クラスから継承します。表示をカスタマイズするのに、CreateWebPartChromeStyle メソッド、GetWebPartVerbs メソッドと、特に RenderPartContents メソッドまたは RenderWebPart メソッドをオーバーライドすることもできます。ゾーン内の WebPart コントロールのカスタム WebPartChrome クラスを使用するには、WebPartZoneBase クラスから派生したカスタムのゾーンを開発し、その CreateWebPartChrome メソッドをオーバーライドします。ゾーン内の子 WebPartChrome オブジェクトの使用方法の詳細については、「例」を参照してください。
WebPartChrome クラスを使用して WebPartZoneBase ゾーンの WebPart コントロールの既定の表示をオーバーライドする方法を次のコード例に示します。
コード例の最初の部分は、ユーザー コントロールです。ユーザー コントロールのソース コードは、別のトピックのものを使用しています。このコード例を実行するには、チュートリアル : Web パーツ ページでの表示モードの変更 のトピックに記載されているユーザー コントロールの .ascx ファイルを、このコード例に示されている .ascx ページと同じフォルダに配置する必要があります。
コード例の 2 番目の部分は Web ページです。コンパイルしたコンポーネントとタグ プリフィックスを登録するため、ファイルの先頭近くには、Register ディレクティブが存在します。また、このページは、<aspSample:MyZone> 要素を使用してカスタム ゾーンを参照し、ゾーン内に複数の標準 ASP.NET サーバー コントロールを含んでいます。サーバー コントロールは実際の機能を実装しません。サーバー コントロールは、ここでは WebPartChrome クラスの機能をゾーンの表示にどのように適用するかを示すためにだけ使用されます。これらのサーバー コントロールは、実際の WebPart コントロールではありませんが、ASP.NET によって実行時に自動的に GenericWebPart オブジェクトでラップされます。そのため、これらのコントロールは WebPart コントロールと同じ機能を持つようになります。
<%@ Page Language="vb" %> <%@ Register TagPrefix="uc1" TagName="DisplayModeMenuVB" Src="~/DisplayModeMenuVB.ascx" %> <%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.VB.Controls" Assembly="MyChromeVB" %> <html > <head runat="server"> </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>
<%@ Page Language="C#" %> <%@ Register TagPrefix="uc1" TagName="DisplayModeMenuCS" Src="~/DisplayModeMenuCS.ascx" %> <%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS.Controls" Assembly="MyChromeCS" %> <html > <head runat="server"> </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>
コード例の 3 番目の部分は、カスタム WebPartZoneBase ゾーンおよび WebPartChrome クラスのソース コードです。このコードにより、カスタムのゾーン クラスのコンストラクタで MyZone.RenderVerbsInMenu プロパティがチェックされます。この値が true の場合、ゾーン内の各 WebPart コントロールのメニューに動詞が表示されます。これは、Web パーツ コントロール セットの既定の動作です。MyZone.RenderVerbsInMenu プロパティ値が、このカスタム ゾーンで既定である false の場合、動詞は、各コントロールのタイトル バーにリンクとして個別に表示されます。Web ページの <aspSample:MyZone> 要素が宣言されているコードに、true に設定された RenderVerbsInMenu 属性が存在するため、動詞はコントロールのメニューに表示されます。この機能を試してみるには、宣言の RenderVerbsInMenu 属性を false に設定して、動詞がどのようにしてリンクとして表示されるのかを確認します。
カスタム WebPartChrome クラスは、複数のメソッドの表示をオーバーライドし、カスタム ゾーンは、その CreateWebPartChrome メソッド内に MyWebPartChrome クラスのインスタンスを作成します。この結果、ページにカスタム レンダリングが適用されます。コード例を実行するためには、このソース コードをコンパイルする必要があります。それを明示的にコンパイルし、コンパイル済みのアセンブリを Web サイトの Bin フォルダまたはグローバル アセンブリ キャッシュに配置できます。サイトの App_Code フォルダにソース コードを配置し、実行時に動的にコンパイルすることもできます。両方のコンパイル方法を示すチュートリアルについては、「チュートリアル : カスタム サーバー コントロールの開発と使用」を参照してください。
Imports System 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
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); } } }
ブラウザに Web ページを読み込むと、MyWebPartChrome クラスのソース コードで行われた表示に関するさまざまなカスタマイズが、ゾーンに表示される WebPart コントロールにどのように反映されるのかを確認できます。


System.Web.UI.WebControls.WebParts.WebPartChrome


Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


- WebPartChrome クラスのページへのリンク