次の方法で共有


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 のコントロールではありませんが、実行時にオブジェクトで自動的にラップ (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>

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

カスタム WebPartChrome クラスは、いくつかのメソッドのレンダリングをオーバーライドし、カスタム ゾーンは、そのCreateWebPartChromeメソッドで クラスのインスタンスをMyWebPartChrome作成します。 これにより、カスタム レンダリングがページに適用されます。 コード例を実行するには、このソース コードをコンパイルする必要があります。 明示的にコンパイルし、結果のアセンブリを 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 コントロールまたはサーバー コントロールをフレームする周辺機器ユーザー インターフェイス (UI) 要素を WebPartZoneBase 指します。 コントロールのクロムには、境界線、タイトル バー、およびタイトル バー内に表示されるアイコン、タイトル テキスト、動詞メニューが含まれます。 クロムの外観はゾーン レベルで設定され、ゾーン内のすべてのサーバー コントロールに適用されます。

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

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

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

注意 (継承者)

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

適用対象

こちらもご覧ください