WebPartChrome Classe

Definição

Permite aos programadores sobrepor a renderização apenas para as secções selecionadas de WebPart ou para os controlos do servidor numa WebPartZoneBase zona.

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

Exemplos

O exemplo de código seguinte demonstra como usar a WebPartChrome classe para sobrescrever a renderização padrão dos WebPart controlos numa WebPartZoneBase zona.

O exemplo de código tem quatro partes:

  • Um controlo de utilizador que permite alterar modos de visualização numa página de Web Parts.

  • Uma página web que aloja todos os controlos do exemplo.

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

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

A primeira parte do exemplo do código é o controlo do utilizador. O código-fonte do controlo do utilizador vem de outro tópico. Para que este exemplo de código funcione, precisa de obter o ficheiro .ascx para o controlo do utilizador a partir do tópico Walkthrough: Changing Display Modes on a Web Parts Page , e colocar o ficheiro na mesma pasta da página .aspx neste exemplo de código.

A segunda parte do exemplo é a página Web. Note que existe uma Register diretiva perto do topo do ficheiro para registar o componente compilado e um prefixo de etiqueta. Note-se também que a página faz referência à zona personalizada usando o elemento <aspSample:MyZone> e inclui vários controlos padrão ASP.NET servidor dentro da zona. Os controlos do servidor não implementam qualquer funcionalidade real; São usadas aqui apenas para ilustrar como as WebPartChrome características da classe se aplicam às zonas de renderização. Note que estes controlos de servidor, embora não sejam controlos WebPart reais, são automaticamente encapsulados (por ASP.NET) com um objeto GenericWebPart em tempo de execução, pelo que terão a mesma funcionalidade que os controlos 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>

A terceira parte do exemplo de código é o código-fonte para a zona personalizada WebPartZoneBase e 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 são renderizados num menu para cada um dos WebPart controlos na zona. Este é o comportamento normal e padrão no conjunto de controlos Web Parts. Se o MyZone.RenderVerbsInMenu valor da propriedade for false, que é o padrão nesta zona personalizada, os verbos são renderizados individualmente como ligações na barra de título de cada controlo. Note que no código da página Web onde o <aspSample:MyZone> elemento é declarado, existe um RenderVerbsInMenu atributo definido como true, de modo que os verbos apareçam nos menus dos controlos. Para experimentar esta funcionalidade, pode definir o atributo declarativo RenderVerbsInMenu para false, e observar como os verbos são representados como ligações.

A classe personalizada WebPartChrome sobrepõe a renderização em vários métodos, e a zona personalizada cria uma instância da MyWebPartChrome classe no seu CreateWebPartChrome método. Isto aplica a renderização personalizada à página. Para que o exemplo de código seja executado, tens de compilar este código-fonte. Pode compilar explicitamente e colocar o assembly resultante na pasta Bin do seu site ou na cache global assembly. Alternativamente, pode colocar o código-fonte na pasta App_Code do seu site, onde será compilado dinamicamente em tempo de execução. Para um guia que demonstra ambos os métodos de compilação, veja Guia: Desenvolvimento e Utilização de um Controlo 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

Quando carregas a página Web num navegador, podes ver como as várias personalizações estilísticas e outras de renderização feitas no código-fonte da MyWebPartChrome classe aparecem nos WebPart controlos renderizados na zona.

Observações

Web Parts chrome refere-se aos elementos periféricos da interface de utilizador (UI) que enquadram cada WebPart controlo de controlo ou servidor contido numa WebPartZoneBase zona. O cromo de um controlo inclui a sua borda, a sua barra de título e os ícones, texto do título e verbos que aparecem na barra de título. A aparência do cromo é definida ao nível da zona e aplica-se a todos os controlos do servidor na zona.

O conjunto de controlos Web Parts usa a WebPartChrome classe para renderizar o cromo dos WebPart controlos. Além disso, esta classe permite aos programadores personalizar a renderização de qualquer secção individual (como o cabeçalho ou rodapé) dos WebPart controlos numa WebPartZoneBase zona sem terem de tratar de toda a renderização desses controlos. Por exemplo, podes sobrescrever o CreateWebPartChromeStyle método para personalizar alguns atributos de estilo específicos aplicados à WebPartZoneBase zona, mas podes confiar na renderização por defeito para tratar do resto.

A WebPartChrome classe contém vários métodos importantes que são úteis quando se quer sobrepor a renderização dos WebPart controlos. Um deles é o CreateWebPartChromeStyle método, que permite alterar os atributos de estilo do Style objeto associado ao WebPartChrome objeto usado para renderizar um controlo. Outra é o WebPartChrome construtor, que usas quando sobrescreves o CreateWebPartChrome método numa classe personalizada WebPartZoneBase para criar uma instância do teu objeto personalizado WebPartChrome . Outro método útil é o RenderPartContents método, que pode usar para controlar a renderização da área de conteúdo dos controlos numa zona (ao contrário de elementos do Chrome como cabeçalhos, rodapés e barras de título). O GetWebPartVerbs método permite-lhe excluir certos verbos de serem renderizados, caso por algum motivo não queira que os utilizadores vejam esses verbos na interface. Finalmente, se quiseres controlo programático completo sobre todos os aspetos da renderização dos WebPart controlos, podes sobrepor 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 ao WebPartChrome objeto e à instância atual WebPartManager , respetivamente.

Notas para Herdeiros

Herda da WebPartChrome classe quando quiseres sobrepor a renderização padrão de certas secções ou WebPart controlos do servidor. Podes opcionalmente sobrescrever 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 a tua classe personalizada WebPartChrome para os WebPart controlos numa zona, desenvolve uma zona personalizada derivada da WebPartZoneBase classe e sobrepõe-se ao seu CreateWebPartChrome() método. Para detalhes sobre como usar um objeto filho WebPartChrome numa zona, consulte a secção Exemplo.

Construtores

Name Description
WebPartChrome(WebPartZoneBase, WebPartManager)

Inicializa uma nova instância do controlo.

Propriedades

Name Description
DragDropEnabled

Recebe um valor que indica se os controlos podem ser arrastados para dentro e fora da zona.

WebPartManager

Recebe uma referência à instância atual WebPartManager .

Zone

Recebe uma referência para a zona associada WebPartZoneBase .

Métodos

Name Description
CreateWebPartChromeStyle(WebPart, PartChromeType)

Cria o objeto style que fornece atributos style para cada WebPart controlo renderizado pelo WebPartChrome objeto.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
FilterWebPartVerbs(WebPartVerbCollection, WebPart)

Exclui verbos específicos de serem renderizados, com base em critérios fornecidos por um programador.

GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
GetWebPartChromeClientID(WebPart)

Obtém o ID do cliente do WebPartChrome objeto tal como renderizado numa página Web.

GetWebPartTitleClientID(WebPart)

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

GetWebPartVerbs(WebPart)

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

MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
PerformPreRender()

Realiza tarefas que devem ser feitas antes dos controlos de renderização WebPart .

RenderPartContents(HtmlTextWriter, WebPart)

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

RenderWebPart(HtmlTextWriter, WebPart)

Renderiza um controlo completo WebPart com todas as suas secções.

ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)

Aplica-se a

Ver também