Sdílet prostřednictvím


WebPartChrome Třída

Definice

Umožňuje vývojářům přepsat vykreslování pouze pro vybrané oddíly WebPart nebo serverové ovládací prvky v WebPartZoneBase zóně.

public ref class WebPartChrome
public class WebPartChrome
type WebPartChrome = class
Public Class WebPartChrome
Dědičnost
WebPartChrome

Příklady

Následující příklad kódu ukazuje, jak pomocí WebPartChrome třídy přepsat výchozí vykreslování ovládacích WebPart prvků v WebPartZoneBase zóně.

Příklad kódu má čtyři části:

  • Uživatelský ovládací prvek, který umožňuje měnit režimy zobrazení na stránce webových částí.

  • Webová stránka, která je hostitelem všech ovládacích prvků v příkladu.

  • Třída, která obsahuje zdrojový kód pro vlastní WebPartZoneBase zónu WebPartChrome a třídu.

  • Vysvětlení fungování příkladu

První částí příkladu kódu je uživatelský ovládací prvek. Zdrojový kód uživatelského ovládacího prvku pochází z jiného tématu. Aby tento příklad kódu fungoval, musíte získat soubor .ascx pro uživatelský ovládací prvek z tématu Návod: Změna režimů zobrazení na stránce webových částí a umístit soubor do stejné složky jako stránka .aspx v tomto příkladu kódu.

Druhou částí příkladu je webová stránka. Všimněte si, že v horní části souboru je Register direktiva pro registraci zkompilované komponenty a předpona značky. Všimněte si také, že stránka odkazuje na vlastní zónu pomocí elementu <aspSample:MyZone> a obsahuje několik standardních ASP.NET serverových ovládacích prvků v rámci zóny. Serverové ovládací prvky neimplementují žádné skutečné funkce. Používají se zde pouze k ilustraci toho, jak WebPartChrome se funkce třídy vztahují na vykreslovací zóny. Všimněte si, že tyto serverové ovládací prvky, i když nejsou skutečnými WebPart ovládacími prvky, jsou automaticky zabalené (podle ASP.NET) s objektem GenericWebPart za běhu, takže budou mít stejné funkce jako WebPart ovládací prvky.

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

Třetí část příkladu kódu je zdroj pro vlastní WebPartZoneBase zónu WebPartChrome a třídu. V konstruktoru pro třídu vlastní zóny kód kontroluje MyZone.RenderVerbsInMenu vlastnost. Pokud je truehodnota , vykreslí se příkazy v nabídce pro každý z ovládacích WebPart prvků v zóně. Toto je normální výchozí chování v sadě ovládacích prvků webových částí. MyZone.RenderVerbsInMenu Pokud je falsehodnota vlastnosti , což je výchozí hodnota v této vlastní zóně, jsou příkazy vykreslovány jednotlivě jako odkazy v záhlaví každého ovládacího prvku. Všimněte si, že v kódu webové stránky, kde <aspSample:MyZone> je prvek deklarován, je RenderVerbsInMenu atribut nastavený na true, takže příkazy se zobrazí v nabídkách ovládacích prvků. Pokud chcete s touto funkcí experimentovat, můžete nastavit deklarativní RenderVerbsInMenu atribut na falsea poznamenat, jak se příkazy vykreslují jako odkazy.

Vlastní WebPartChrome třída přepíše vykreslování na několik metod a vlastní zóna vytvoří instanci MyWebPartChrome třídy ve své CreateWebPartChrome metodě. Tím se na stránku použije vlastní vykreslování. Aby se příklad kódu spustil, musíte tento zdrojový kód zkompilovat. Můžete ho explicitně zkompilovat a umístit výsledné sestavení do složky Bin webu nebo globální mezipaměti sestavení . Případně můžete zdrojový kód umístit do složky App_Code webu, kde se bude dynamicky kompilovat za běhu. Návod, který ukazuje obě metody kompilace, najdete v tématu Návod: Vývoj a použití vlastního ovládacího prvku webového serveru.

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

Když načtete webovou stránku v prohlížeči, uvidíte, jak se různá stylistická a jiná přizpůsobení vykreslování provedená ve zdrojovém MyWebPartChrome kódu třídy zobrazí na WebPart ovládacích prvcích vykreslených v zóně.

Poznámky

Webové části chrome odkazuje na prvky periferního uživatelského rozhraní (UI), které rámují každý WebPart ovládací prvek nebo serverový ovládací prvek obsažený v WebPartZoneBase zóně. Chrome ovládacího prvku zahrnuje jeho ohraničení, záhlaví a ikony, text nadpisu a nabídku sloves, které se zobrazí v záhlaví. Vzhled chromu je nastaven na úrovni zóny a platí pro všechny ovládací prvky serveru v zóně.

Sada ovládacích prvků webové části používá WebPartChrome třídu k vykreslení chromu pro WebPart ovládací prvky. Kromě toho tato třída poskytuje vývojářům způsob, jak přizpůsobit vykreslování libovolného jednotlivého oddílu (například záhlaví nebo zápatí) ovládacích WebPart prvků v WebPartZoneBase zóně, aniž by museli zpracovávat veškeré vykreslování těchto ovládacích prvků. Můžete například přepsat metodu CreateWebPartChromeStyle a přizpůsobit některé konkrétní atributy stylu použité na zónu WebPartZoneBase , ale při zpracování zbytku se můžete spolehnout na výchozí vykreslování.

Třída WebPartChrome obsahuje několik důležitých metod, které jsou užitečné, když chcete přepsat vykreslování ovládacích WebPart prvků. Jedním je CreateWebPartChromeStyle metoda, která umožňuje změnit atributy stylu objektu Style přidruženého k objektu WebPartChrome použitému k vykreslení ovládacího prvku. Další je WebPartChrome konstruktor, který použijete při přepsání CreateWebPartChrome metody ve vlastní WebPartZoneBase třídě k vytvoření instance vlastního WebPartChrome objektu. Další užitečnou metodou je RenderPartContents metoda, kterou můžete použít k řízení vykreslování oblasti obsahu ovládacích prvků v zóně (na rozdíl od prvků chromu, jako jsou záhlaví, zápatí a záhlaví). Metoda GetWebPartVerbs umožňuje vyloučit určité příkazy z vykreslení, pokud z nějakého důvodu nechcete, aby uživatelé viděli tyto příkazy v uživatelském rozhraní. A konečně, pokud chcete mít úplnou programovou kontrolu nad všemi aspekty vykreslování WebPart ovládacích prvků, můžete metodu RenderWebPart přepsat.

Užitečné jsou také některé vlastnosti WebPartChrome třídy. Vlastnosti Zone a WebPartManager poskytují odkazy na zónu přidruženou k objektu WebPartChrome a aktuální WebPartManager instanci v uvedeném pořadí.

Poznámky pro dědice

Dědit z WebPartChrome třídy, pokud chcete přepsat výchozí vykreslování určitých oddílů nebo serverových ovládacích WebPart prvků. Volitelně můžete přepsat metodu CreateWebPartChromeStyle(WebPart, PartChromeType) , metodu GetWebPartVerbs(WebPart) a zejména RenderPartContents(HtmlTextWriter, WebPart) metody nebo RenderWebPart(HtmlTextWriter, WebPart) a přizpůsobit vykreslování. Pokud chcete použít vlastní WebPartChrome třídu pro WebPart ovládací prvky v zóně, vytvořte vlastní zónu WebPartZoneBase odvozenou z třídy a přepište její CreateWebPartChrome() metodu. Podrobnosti o použití podřízeného WebPartChrome objektu v zóně najdete v části Příklad.

Konstruktory

WebPartChrome(WebPartZoneBase, WebPartManager)

Inicializuje novou instanci ovládacího prvku.

Vlastnosti

DragDropEnabled

Získá hodnotu, která označuje, zda ovládací prvky lze přetáhnout do a ven ze zóny.

WebPartManager

Získá odkaz na aktuální WebPartManager instanci.

Zone

Získá odkaz na přidruženou WebPartZoneBase zónu.

Metody

CreateWebPartChromeStyle(WebPart, PartChromeType)

Vytvoří objekt stylu, který poskytuje atributy stylu pro každý WebPart ovládací prvek vykreslený objektem WebPartChrome .

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
FilterWebPartVerbs(WebPartVerbCollection, WebPart)

Vyloučí konkrétní příkazy z vykreslení na základě kritérií zadaných vývojářem.

GetHashCode()

Slouží jako výchozí hashovací funkce.

(Zděděno od Object)
GetType()

Získá aktuální Type instanci.

(Zděděno od Object)
GetWebPartChromeClientID(WebPart)

Získá ID klienta objektu WebPartChrome vykreslené na webové stránce.

GetWebPartTitleClientID(WebPart)

Získá ID klienta pro buňku tabulky, která obsahuje název ovládacího prvku WebPart .

GetWebPartVerbs(WebPart)

Získá kolekci sloves, které by měly být vykresleny pomocí WebPart ovládacího prvku.

MemberwiseClone()

Vytvoří mělkou kopii aktuálního Objectsouboru .

(Zděděno od Object)
PerformPreRender()

Provádí úlohy, které je nutné provést před vykreslováním WebPart ovládacích prvků.

RenderPartContents(HtmlTextWriter, WebPart)

Vykreslí oblast hlavního obsahu ovládacího prvku WebPart s výjimkou záhlaví a zápatí.

RenderWebPart(HtmlTextWriter, WebPart)

Vykreslí úplný WebPart ovládací prvek se všemi jeho oddíly.

ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Platí pro

Viz také