WebPartChrome クラス

定義

開発者は、WebPart ゾーン内のWebPartZoneBaseコントロールまたはサーバー コントロールの選択したセクションに対してのみレンダリングをオーバーライドできます。

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

次のコード例では、WebPartChrome クラスを使用して、WebPart ゾーン内のWebPartZoneBase コントロールの既定のレンダリングをオーバーライドする方法を示します。

このコード例には、次の 4 つの部分があります。

  • Web パーツ ページの表示モードを変更できるユーザー コントロール。

  • この例のすべてのコントロールをホストする Web ページ。

  • カスタム WebPartZoneBase ゾーンと WebPartChrome クラスのソース コードを含むクラス。

  • この例のしくみの説明。

コード例の最初の部分は、ユーザー コントロールです。 ユーザー コントロールのソース コードは、別のトピックから取得されます。 このコード例を機能させるには、「 チュートリアル: Web パーツ ページでの表示モードの変更 」トピックからユーザー コントロールの .ascx ファイルを取得し、このコード例の .aspx ページと同じフォルダーにファイルを配置する必要があります。

この例の 2 番目の部分は Web ページです。 コンパイル済みコンポーネントとタグ プレフィックスを登録するために、ファイルの先頭付近に 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>

コード例の 3 番目の部分は、カスタム WebPartZoneBase ゾーンと WebPartChrome クラスのソースです。 カスタム ゾーン クラスのコンストラクターで、コードによって MyZone.RenderVerbsInMenu プロパティがチェックされます。 値が trueの場合、ゾーン内の各 WebPart コントロールのメニューに動詞が表示されます。 これは、Web パーツ コントロール セットの通常の既定の動作です。 MyZone.RenderVerbsInMenuプロパティ値がこのカスタム ゾーンの既定値であるfalse場合、動詞は各コントロールのタイトル バーのリンクとして個別にレンダリングされます。 <aspSample:MyZone>要素が宣言されている Web ページ コードでは、コントロールのメニューに動詞が表示されるように、RenderVerbsInMenuに設定されたtrue属性があることに注意してください。 この機能を試すには、宣言型 RenderVerbsInMenu 属性を falseに設定し、動詞がリンクとしてレンダリングされる方法に注意してください。

カスタム WebPartChrome クラスは、複数のメソッドのレンダリングをオーバーライドし、カスタム ゾーンでは、MyWebPartChrome メソッドでCreateWebPartChrome クラスのインスタンスを作成します。 これにより、カスタム レンダリングがページに適用されます。 コード例を実行するには、このソース コードをコンパイルする必要があります。 明示的にコンパイルし、結果のアセンブリを Web サイトの 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

ブラウザーで Web ページを読み込むと、 MyWebPartChrome クラスのソース コードで行われたさまざまなスタイルやその他のレンダリングのカスタマイズが、ゾーンにレンダリングされた WebPart コントロールにどのように表示されるかを確認できます。

注釈

Web パーツ クロムは、WebPart ゾーンに含まれる各WebPartZoneBase コントロールまたはサーバー コントロールをフレームに収める周辺機器ユーザー インターフェイス (UI) 要素を指します。 コントロールのクロムには、境界線、タイトル バー、およびタイトル バー内に表示されるアイコン、タイトル テキスト、動詞メニューが含まれます。 クロムの外観はゾーン レベルで設定され、ゾーン内のすべてのサーバー コントロールに適用されます。

Web パーツ コントロール セットは、 WebPartChrome クラスを使用して、 WebPart コントロールのクロムをレンダリングします。 さらに、このクラスを使用すると、開発者は、WebPart ゾーン内のWebPartZoneBase コントロールの個々のセクション (ヘッダーやフッターなど) のレンダリングをカスタマイズできます。これらのコントロールのすべてのレンダリングを処理する必要はありません。 たとえば、 CreateWebPartChromeStyle メソッドをオーバーライドして、 WebPartZoneBase ゾーンに適用される特定のスタイル属性をカスタマイズできますが、残りの部分は既定のレンダリングに依存できます。

WebPartChrome クラスには、WebPart コントロールのレンダリングをオーバーライドする場合に便利ないくつかの重要なメソッドが含まれています。 1 つは CreateWebPartChromeStyle メソッドで、コントロールのレンダリングに使用するStyle オブジェクトに関連付けられているWebPartChrome オブジェクトのスタイル属性を変更できます。 もう 1 つは、カスタム WebPartChrome クラスのCreateWebPartChrome メソッドをオーバーライドしてカスタム WebPartZoneBase オブジェクトのインスタンスを作成するときに使用するWebPartChrome コンストラクターです。 もう 1 つの便利な方法は、 RenderPartContents メソッドです。これは、(ヘッダー、フッター、タイトル バーなどのクロム要素ではなく) ゾーン内のコントロールのコンテンツ領域のレンダリングを制御するために使用できます。 GetWebPartVerbsメソッドを使用すると、何らかの理由でユーザーに UI でこれらの動詞を表示させたくない場合に、特定の動詞をレンダリングから除外できます。 最後に、 WebPart コントロールのレンダリングのすべての側面をプログラムで完全に制御する場合は、 RenderWebPart メソッドをオーバーライドできます。

WebPartChrome クラスのいくつかのプロパティも役立ちます。 Zoneプロパティと WebPartManager プロパティは、WebPartChrome オブジェクトと現在のWebPartManager インスタンスに関連付けられたゾーンへの参照を提供します。

注意 (継承者)

WebPartChrome コントロールまたはサーバー コントロールの特定のセクションの既定のレンダリングをオーバーライドする場合は、WebPart クラスから継承します。 必要に応じて、 CreateWebPartChromeStyle(WebPart, PartChromeType) メソッド、 GetWebPartVerbs(WebPart) メソッド、特に RenderPartContents(HtmlTextWriter, WebPart) または RenderWebPart(HtmlTextWriter, WebPart) メソッドをオーバーライドして、レンダリングをカスタマイズできます。 ゾーン内のWebPartChrome コントロールにカスタム WebPart クラスを使用するには、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 オブジェクトのクライアント ID を取得します。

GetWebPartTitleClientID(WebPart)

WebPart コントロールのタイトルを含むテーブル セルのクライアント ID を取得します。

GetWebPartVerbs(WebPart)

WebPart コントロールでレンダリングする必要がある動詞のコレクションを取得します。

MemberwiseClone()

現在の Objectの簡易コピーを作成します。

(継承元 Object)
PerformPreRender()

WebPart コントロールをレンダリングする前に実行する必要があるタスクを実行します。

RenderPartContents(HtmlTextWriter, WebPart)

ヘッダーとフッターを除く、 WebPart コントロールのメイン コンテンツ領域をレンダリングします。

RenderWebPart(HtmlTextWriter, WebPart)

すべてのセクションを含む完全な WebPart コントロールをレンダリングします。

ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)

適用対象

こちらもご覧ください