WebPartChrome Класс

Определение

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

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

Примеры

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

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

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

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

  • Класс, содержащий исходный код для пользовательской 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.RenderVerbsInMenu Если значение свойства — falseэто значение по умолчанию в этой пользовательской зоне, команды отображаются по отдельности в виде ссылок в строке заголовка каждого элемента управления. Обратите внимание, что в коде веб-страницы, в котором <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 элементах управления, отображаемых в зоне.

Комментарии

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

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

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

Также полезно несколько свойств WebPartChrome класса. WebPartManager Свойства Zone предоставляют ссылки на зону, связанную с WebPartChrome объектом и текущим WebPartManager экземпляром соответственно.

Примечания для тех, кто наследует этот метод

Наследуется от WebPartChrome класса, когда требуется переопределить отрисовку определенных разделов или серверных WebPart элементов управления по умолчанию. При необходимости можно переопределить CreateWebPartChromeStyle(WebPart, PartChromeType) метод, GetWebPartVerbs(WebPart) метод и особенно RenderPartContents(HtmlTextWriter, WebPart) методы RenderWebPart(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, который отображается на веб-странице.

GetWebPartTitleClientID(WebPart)

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

GetWebPartVerbs(WebPart)

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

MemberwiseClone()

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

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

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

RenderPartContents(HtmlTextWriter, WebPart)

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

RenderWebPart(HtmlTextWriter, WebPart)

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

ToString()

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

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

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

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