Compartilhar via


WebPartChrome Classe

Definição

Permite que os desenvolvedores substituam a renderização apenas pelas seções selecionadas dos controles de WebPart ou de servidor em uma zona WebPartZoneBase.

public ref class WebPartChrome
public class WebPartChrome
type WebPartChrome = class
Public Class WebPartChrome
Herança
WebPartChrome

Exemplos

O exemplo de código a seguir demonstra como usar a WebPartChrome classe para substituir a renderização padrão de WebPart controles em uma WebPartZoneBase zona.

O exemplo de código tem quatro partes:

  • Um controle de usuário que permite alterar os modos de exibição em uma página de Web Parts.

  • Uma página da Web que hospeda todos os controles no exemplo.

  • Uma classe que contém o código-fonte de uma zona personalizada WebPartZoneBase e uma WebPartChrome classe.

  • Uma explicação de como o exemplo funciona.

A primeira parte do exemplo de código é o controle de usuário. O código-fonte para o controle do usuário vem de outro tópico. Para que este exemplo de código funcione, você precisa obter o arquivo .ascx para o controle de usuário do tópico Passo a passo : alterando modos de exibição em uma página de Web Parts e colocar o arquivo na mesma pasta que a página .aspx neste exemplo de código.

A segunda parte do exemplo é a página da Web. Observe que há uma Register diretiva próxima à parte superior do arquivo para registrar o componente compilado e um prefixo de marca. Observe também que a página faz referência à zona personalizada usando o elemento <aspSample:MyZone> e inclui vários controles de servidor padrão ASP.NET dentro da zona. Os controles do servidor não implementam nenhuma funcionalidade real; eles são usados aqui apenas para ilustrar como os recursos de WebPartChrome classe se aplicam às zonas de renderização. Observe que esses controles de servidor, embora não sejam controles reais WebPart , são encapsulados automaticamente (por ASP.NET) com um GenericWebPart objeto em tempo de execução, portanto, eles terão a mesma funcionalidade WebPart que os controles.

<%@ 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>

A terceira parte do exemplo de código é a origem da zona personalizada WebPartZoneBase e de uma WebPartChrome classe. No construtor da classe de zona personalizada, o código verifica a MyZone.RenderVerbsInMenu propriedade . Se o valor for true, os verbos serão renderizados em um menu para cada um dos WebPart controles na zona. Esse é o comportamento padrão normal no conjunto de controles de Web Parts. Se o valor da MyZone.RenderVerbsInMenu propriedade for false, que é o padrão nessa zona personalizada, os verbos serão renderizados individualmente como links na barra de título de cada controle. Observe que, no código da página da Web em que o <aspSample:MyZone> elemento é declarado, há um RenderVerbsInMenu atributo definido como , para trueque os verbos apareçam nos menus nos controles. Para experimentar esse recurso, você pode definir o atributo declarativo RenderVerbsInMenu como falsee observar como os verbos são renderizados como links.

A classe personalizada WebPartChrome substitui a renderização em vários métodos e a zona personalizada cria uma instância da MyWebPartChrome classe em seu CreateWebPartChrome método. Isso aplica a renderização personalizada à página. Para que o exemplo de código seja executado, você deve compilar esse código-fonte. Você pode compilá-lo explicitamente e colocar o assembly resultante na pasta Bin do seu site ou no cache de assembly global. Como alternativa, você pode colocar o código-fonte na pasta App_Code do site, em que ele será compilado dinamicamente em tempo de execução. Para obter um passo a passo que demonstre ambos os métodos de compilação, consulte Passo a passo: Desenvolvendo e usando um controle de servidor Web personalizado.

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

Ao carregar a página da Web em um navegador, você pode ver como as várias personalizações estilísticas e outras renderizações feitas no código-fonte da MyWebPartChrome classe aparecem nos WebPart controles renderizados na zona.

Comentários

Web Parts chrome refere-se aos elementos de interface do usuário periféricos que enquadram cada WebPart controle ou controle de servidor contido em uma WebPartZoneBase zona. O cromo para um controle inclui sua borda, sua barra de título e os ícones, o texto do título e o menu de verbos que aparecem na barra de título. A aparência do cromo é definida no nível da zona e se aplica a todos os controles de servidor na zona.

O conjunto de controle de Web Parts usa a WebPartChrome classe para renderizar o cromo para WebPart controles. Além disso, essa classe fornece uma maneira para os desenvolvedores personalizarem a renderização de qualquer seção individual (como o cabeçalho ou rodapé) dos WebPart controles em uma WebPartZoneBase zona sem precisar lidar com toda a renderização desses controles. Por exemplo, você pode substituir o CreateWebPartChromeStyle método para personalizar alguns atributos de estilo específicos aplicados à WebPartZoneBase zona, mas você pode contar com a renderização padrão para lidar com o restante.

A WebPartChrome classe contém vários métodos importantes que são úteis quando você deseja substituir a renderização de WebPart controles. Um deles é o CreateWebPartChromeStyle método , que permite alterar os atributos de estilo do Style objeto associado ao WebPartChrome objeto usado para renderizar um controle. Outro é o WebPartChrome construtor, que você usa quando substitui o CreateWebPartChrome método em uma classe personalizada WebPartZoneBase para criar uma instância do objeto personalizado WebPartChrome . Outro método útil é o RenderPartContents método , que você pode usar para controlar a renderização da área de conteúdo dos controles em uma zona (em vez de elementos cromados, como cabeçalhos, rodapés e barras de título). O GetWebPartVerbs método permite que você exclua determinados verbos de serem renderizados se, por algum motivo, você não quiser que os usuários vejam esses verbos na interface do usuário. Por fim, se você quiser ter controle programático completo sobre todos os aspectos da renderização dos WebPart controles, poderá substituir o RenderWebPart método .

Várias propriedades da WebPartChrome classe também são úteis. As Zone propriedades e WebPartManager fornecem referências à zona associada WebPartChrome ao objeto e à instância atual WebPartManager , respectivamente.

Notas aos Herdeiros

Herda da WebPartChrome classe quando você deseja substituir a renderização padrão de determinadas seções de ou controles de WebPart servidor. Opcionalmente, você pode substituir o CreateWebPartChromeStyle(WebPart, PartChromeType) método, o GetWebPartVerbs(WebPart) método e, especialmente, os RenderPartContents(HtmlTextWriter, WebPart) métodos ou RenderWebPart(HtmlTextWriter, WebPart) , para personalizar a renderização. Para usar sua classe personalizada WebPartChrome para os WebPart controles em uma zona, desenvolva uma zona personalizada derivada da WebPartZoneBase classe e substitua seu CreateWebPartChrome() método. Para obter detalhes sobre como usar um objeto filho WebPartChrome em uma zona, consulte a seção Exemplo.

Construtores

WebPartChrome(WebPartZoneBase, WebPartManager)

Inicializa uma nova instância do controle.

Propriedades

DragDropEnabled

Obtém um valor que indica se os controles podem ser arrastados para dentro e para fora de uma zona.

WebPartManager

Obtém uma referência à instância WebPartManager atual.

Zone

Obtém uma referência à zona WebPartZoneBase associada.

Métodos

CreateWebPartChromeStyle(WebPart, PartChromeType)

Cria o objeto de estilo que fornece os atributos de estilo para cada controle de WebPart renderizado pelo objeto de WebPartChrome.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
FilterWebPartVerbs(WebPartVerbCollection, WebPart)

Exclui verbos específicos que estão sendo renderizados, com base em critérios fornecidos por um desenvolvedor.

GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
GetWebPartChromeClientID(WebPart)

Obtém a ID do cliente para o objeto WebPartChrome conforme renderizado em uma página da Web.

GetWebPartTitleClientID(WebPart)

Obtém a ID do cliente para a célula da tabela que contém o título de um controle WebPart.

GetWebPartVerbs(WebPart)

Obtém uma coleção de verbos que devem ser renderizados com um controle de WebPart.

MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
PerformPreRender()

Executa tarefas que devem ser executadas antes da renderização dos controles de WebPart.

RenderPartContents(HtmlTextWriter, WebPart)

Renderiza a área de conteúdo principal de um controle de WebPart, excluindo o cabeçalho e o rodapé.

RenderWebPart(HtmlTextWriter, WebPart)

Renderiza um controle de WebPart completo com todas as suas seções.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Aplica-se a

Confira também