Поделиться через


WebPartChrome Класс

Определение

Позволяет разработчикам переопределять способ отрисовки только для выделенных разделов элементов управления WebPart или серверных элементов управления в зоне WebPartZoneBase.

public ref class WebPartChrome
public class WebPartChrome
type WebPartChrome = class
Public Class WebPartChrome
Наследование
WebPartChrome

Примеры

В следующем примере кода показано, как использовать WebPartChrome класс для переопределения отображения WebPart элементов управления по умолчанию в WebPartZoneBase зоне.

Пример кода состоит из четырех частей:

  • Пользовательский элемент управления, позволяющий изменять режимы отображения на странице веб-частей.

  • Веб-страница, на которую размещаются все элементы управления в примере.

  • Класс, содержащий исходный код для пользовательской WebPartZoneBase зоны и WebPartChrome класса .

  • Объяснение принципов работы примера.

Первая часть примера кода — это пользовательский элемент управления. Исходный код для пользовательского элемента управления поступает из другого раздела. Чтобы этот пример кода работал, необходимо получить ASCX-файл для пользовательского элемента управления из раздела Walkthrough: Changing Display Modes on a Web Parts Page (Пошаговое руководство: изменение режимов отображения на странице веб-частей ) и поместить файл в ту же папку, что и страница .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.RenderVerbsInMenu Если свойство имеет falseзначение , которое является значением по умолчанию в этой настраиваемой зоне, команды отображаются по отдельности в виде ссылок в заголовке каждого элемента управления. Обратите внимание, что в коде веб-страницы, где <aspSample:MyZone> объявлен элемент, атрибут RenderVerbsInMenu имеет значение true, чтобы команды отображались в меню элементов управления. Чтобы поэкспериментировать с этой функцией, можно задать декларативному RenderVerbsInMenu атрибуту falseзначение и заметить, как команды отображаются в виде ссылок.

Пользовательский WebPartChrome класс переопределяет отрисовку в нескольких методах, а пользовательская зона создает экземпляр класса в своем CreateWebPartChrome методе MyWebPartChrome . При этом пользовательская отрисовка применяется к странице. Для выполнения примера кода необходимо скомпилировать этот исходный код. Ее можно скомпилировать явным образом и поместить полученную сборку в папку 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 элементах управления, отображаемых в зоне.

Комментарии

Хром веб-частей относится к периферийным элементам пользовательского интерфейса, которые обрамляют каждый WebPart элемент управления или серверный элемент управления, содержащийся в WebPartZoneBase зоне. Хром для элемента управления включает его границу, строку заголовка, а также значки, текст заголовка и меню команд, которые отображаются в строке заголовка. Внешний вид хрома задается на уровне зоны и применяется ко всем серверным элементам управления в зоне.

Набор элементов управления веб-частей использует WebPartChrome класс для отрисовки хрома для WebPart элементов управления. Кроме того, этот класс позволяет разработчикам настраивать отрисовку любого отдельного раздела (например, верхнего или нижнего WebPart колонтитула) элементов управления в WebPartZoneBase зоне без необходимости обрабатывать все отрисовки для этих элементов управления. Например, можно переопределить CreateWebPartChromeStyle метод , чтобы настроить некоторые определенные атрибуты стиля, применяемые к WebPartZoneBase зоне, но для обработки остальных можно использовать отрисовку по умолчанию.

Класс WebPartChrome содержит несколько важных методов, которые полезны, если требуется переопределить отрисовку WebPart элементов управления. Одним из них является CreateWebPartChromeStyle метод , который позволяет изменять атрибуты стиля объекта, связанного Style с WebPartChrome объектом, используемым для отрисовки элемента управления. Другой — WebPartChrome конструктор, который используется при переопределении CreateWebPartChrome метода в пользовательском WebPartZoneBase классе для создания экземпляра пользовательского WebPartChrome объекта. Другим полезным методом RenderPartContents является метод , который можно использовать для управления отрисовкой области содержимого элементов управления в зоне (в отличие от элементов хрома, таких как колонтитулы, нижние колонтитулы и строки заголовков). Метод GetWebPartVerbs позволяет исключить определенные команды из отображения, если по какой-либо причине вы не хотите, чтобы пользователи видели эти команды в пользовательском интерфейсе. Наконец, если требуется полный программный контроль над всеми аспектами отрисовки 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)

Получает идентификатор клиента для объекта WebPartChrome, который отображается на веб-странице.

GetWebPartTitleClientID(WebPart)

Получает идентификатор клиента для ячейки таблицы, которая содержит заголовок элемента управления WebPart.

GetWebPartVerbs(WebPart)

Получает коллекцию команд, которые должны отображаться с элементом управления WebPart.

MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
PerformPreRender()

Выполняет задачи, которые необходимо завершить перед отрисовкой элементов управления WebPart.

RenderPartContents(HtmlTextWriter, WebPart)

Отображает основную область содержимого элемента управления WebPart за исключением колонтитулов.

RenderWebPart(HtmlTextWriter, WebPart)

Выполняет полное отображение элемента управления WebPart и всех его разделов.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Применяется к

См. также раздел