다음을 통해 공유


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 컨트롤은 아니지만 런타임에 개체를 사용하여 각각 자동으로 래핑(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 대한 메뉴에서 렌더링됩니다. 이는 웹 파트 컨트롤 집합의 일반적인 기본 동작입니다. 속성 값이 MyZone.RenderVerbsInMenufalse이 사용자 지정 영역의 기본값인 인 경우 동사는 각 컨트롤의 제목 표시줄에 링크로 개별적으로 렌더링됩니다. 요소가 선언된 웹 페이지 코드 <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 표시되는 방식을 확인할 수 있습니다.

설명

웹 파트 크롬은 영역에 포함된 WebPartZoneBaseWebPart 컨트롤 또는 서버 컨트롤을 프레임하는 주변 장치 UI(사용자 인터페이스) 요소를 나타냅니다. 테두리, 제목 표시줄, 아이콘, 제목 텍스트 및 제목 표시줄에 나타나는 동사 메뉴 컨트롤의 크롬에 포함 되어 있습니다. 크롬의 모양은 영역 수준에서 설정되며 영역의 모든 서버 컨트롤에 적용됩니다.

웹 파트 컨트롤 집합 사용 합니다 WebPartChrome 에 대 한 크롬을 렌더링 하는 클래스 WebPart 컨트롤입니다. 또한 이 클래스는 개발자가 해당 컨트롤에 대한 모든 렌더링을 처리하지 않고도 영역에 있는 컨트롤의 개별 섹션(예: 머리글 또는 바닥글)의 WebPart 렌더링을 사용자 지정할 수 있는 WebPartZoneBase 방법을 제공합니다. 예를 들어 메서드를 재정의 CreateWebPartChromeStyle 하여 영역에 적용된 특정 스타일 특성을 사용자 지정할 수 있지만 나머지를 처리하기 위해 WebPartZoneBase 기본 렌더링을 사용할 수 있습니다.

합니다 WebPartChrome 클래스의 렌더링을 재정의 하려는 경우 유용할 수 있는 몇 가지 중요 한 메서드가 포함 되어 WebPart 컨트롤입니다. 하나는 컨트롤을 CreateWebPartChromeStyle 렌더링하는 데 사용되는 개체와 WebPartChrome 연결된 개체의 Style 스타일 특성을 변경할 수 있는 메서드입니다. 또 다른 생성 WebPartChrome 자는 사용자 지정 클래스에서 메서드를 CreateWebPartChrome 재정의하여 사용자 지정 WebPartZoneBaseWebPartChrome 개체의 인스턴스를 만들 때 사용하는 생성자입니다. 또 다른 유용한 방법은 RenderPartContents (대신 chrome 요소 머리글, 바닥글 및 제목 표시줄 등) 영역의 컨트롤의 콘텐츠 영역 렌더링을 제어 하는 데 사용할 수 있는 메서드. GetWebPartVerbs 어떤 이유로 사용자가 UI에서 해당 동사를 볼 수 없도록 하려는 경우 메서드를 사용하면 특정 동사가 렌더링되지 않도록 제외할 수 있습니다. 마지막으로, 모든 부분 렌더링을 완료 프로그래밍 방식으로 제어 하려는 경우는 WebPart 컨트롤을 재정의할 수 있습니다는 RenderWebPart 메서드.

클래스의 WebPartChrome 여러 속성도 유용합니다. 및 속성은 Zone 각각 개체 및 현재 WebPartManager 인스턴스와 WebPartChrome 연결된 영역에 대한 참조를 WebPartManager 제공합니다.

상속자 참고

또는 서버 컨트롤의 WebPartChrome 특정 섹션에 대한 기본 렌더링을 재정의 WebPart 하려는 경우 클래스에서 상속합니다. 필요에 따라 메서드, 메서드, GetWebPartVerbs(WebPart) 특히 또는 RenderWebPart(HtmlTextWriter, WebPart) 메서드를 재정 CreateWebPartChromeStyle(WebPart, PartChromeType)RenderPartContents(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)

웹 페이지에서 렌더링된 WebPartChrome 개체의 클라이언트 ID를 가져옵니다.

GetWebPartTitleClientID(WebPart)

WebPart 컨트롤에 대한 제목이 포함된 테이블 셀의 클라이언트 ID를 가져옵니다.

GetWebPartVerbs(WebPart)

WebPart 컨트롤을 사용하여 렌더링할 동사의 컬렉션을 가져옵니다.

MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.

(다음에서 상속됨 Object)
PerformPreRender()

WebPart 컨트롤을 렌더링하기 전에 수행해야 할 작업을 수행합니다.

RenderPartContents(HtmlTextWriter, WebPart)

머리글과 바닥글을 제외한 WebPart 컨트롤의 주 콘텐츠 영역을 렌더링합니다.

RenderWebPart(HtmlTextWriter, WebPart)

해당 섹션을 모두 사용하여 WebPart 컨트롤 전체를 렌더링합니다.

ToString()

현재 개체를 나타내는 문자열을 반환합니다.

(다음에서 상속됨 Object)

적용 대상

추가 정보