WebPartChrome Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Umożliwia deweloperom zastępowanie renderowania tylko dla wybranych sekcji WebPart kontrolek serwera lub w WebPartZoneBase strefie.
public ref class WebPartChrome
public class WebPartChrome
type WebPartChrome = class
Public Class WebPartChrome
- Dziedziczenie
-
WebPartChrome
Przykłady
W poniższym przykładzie kodu pokazano, jak użyć WebPartChrome klasy do zastąpienia domyślnego WebPart renderowania kontrolek w WebPartZoneBase strefie.
Przykładowy kod ma cztery części:
Kontrolka użytkownika, która umożliwia zmianę trybów wyświetlania na stronie składników Web Part.
Strona sieci Web, która hostuje wszystkie kontrolki w przykładzie.
Klasa zawierająca kod źródłowy strefy niestandardowej WebPartZoneBaseWebPartChrome i klasy.
Wyjaśnienie działania przykładu.
Pierwszą częścią przykładu kodu jest kontrolka użytkownika. Kod źródłowy kontrolki użytkownika pochodzi z innego tematu. Aby ten przykład kodu działał, należy uzyskać plik ascx dla kontrolki użytkownika z przewodnika: zmienianie trybów wyświetlania w temacie Strona składników Web Part i umieścić plik w tym samym folderze co strona .aspx w tym przykładzie kodu.
Drugą częścią przykładu jest strona sieci Web. Należy pamiętać, że w górnej części pliku znajduje Register
się dyrektywa umożliwiająca zarejestrowanie skompilowanego składnika i prefiksu tagu. Należy również zauważyć, że strona odwołuje się do strefy niestandardowej przy użyciu elementu <aspSample:MyZone>
i zawiera kilka standardowych kontrolek serwera ASP.NET w strefie. Kontrolki serwera nie implementują żadnych rzeczywistych funkcji; Są one używane tutaj tylko do zilustrowania sposobu, w WebPartChrome jaki funkcje klasy mają zastosowanie do stref renderowania. Należy pamiętać, że te kontrolki serwera, choć nie są rzeczywistymi WebPart kontrolkami, są automatycznie opakowane (przez ASP.NET) z obiektem GenericWebPart w czasie wykonywania, więc będą miały taką samą funkcjonalność jak WebPart kontrolki.
<%@ 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>
Trzecią częścią przykładu kodu jest źródło strefy niestandardowej WebPartZoneBaseWebPartChrome i klasy. W konstruktorze dla klasy strefy niestandardowej kod sprawdza MyZone.RenderVerbsInMenu
właściwość . Jeśli wartość to true
, czasowniki są renderowane w menu dla każdej kontrolki WebPart w strefie. Jest to normalne, domyślne zachowanie w zestawie kontrolek składników Web Part.
MyZone.RenderVerbsInMenu
Jeśli wartość właściwości to false
, która jest wartością domyślną w tej strefie niestandardowej, czasowniki są renderowane indywidualnie jako linki na pasku tytułu każdej kontrolki. Zwróć uwagę, że w kodzie strony sieci Web, w którym <aspSample:MyZone>
element jest zadeklarowany, istnieje RenderVerbsInMenu
atrybut ustawiony na true
wartość , dzięki czemu czasowniki będą wyświetlane w menu w kontrolkach. Aby poeksperymentować z tą funkcją, możesz ustawić atrybut deklaratywny RenderVerbsInMenu
na false
, i zanotować sposób renderowania czasowników jako linków.
Klasa niestandardowa WebPartChrome zastępuje renderowanie na kilku metodach, a strefa niestandardowa tworzy wystąpienie MyWebPartChrome
klasy w jej CreateWebPartChrome metodzie. Dotyczy to renderowania niestandardowego na stronie. Aby można było uruchomić przykładowy kod, należy skompilować ten kod źródłowy. Można je skompilować jawnie i umieścić wynikowy zestaw w folderze Bin witryny sieci Web lub globalnej pamięci podręcznej zestawów. Alternatywnie można umieścić kod źródłowy w folderze App_Code witryny, w którym będzie dynamicznie kompilowany w czasie wykonywania. Aby zapoznać się z przewodnikiem, który demonstruje obie metody kompilowania, zobacz Przewodnik: opracowywanie i używanie niestandardowej kontrolki serwera sieci Web.
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
Po załadowaniu strony internetowej w przeglądarce można zobaczyć, jak różne dostosowania stylistyczne i inne renderowanie wprowadzone w kodzie MyWebPartChrome
źródłowym klasy są wyświetlane w WebPart kontrolkach renderowanych w strefie.
Uwagi
Chrome składników Web Part odwołuje się do elementów interfejsu użytkownika peryferyjnego, które zawierają każdą WebPart kontrolkę lub kontrolkę serwera znajdującą WebPartZoneBase się w strefie. Chrome kontrolki zawiera jej obramowanie, pasek tytułu oraz ikony, tekst tytułu i menu czasowników wyświetlane na pasku tytułu. Wygląd chromu jest ustawiany na poziomie strefy i ma zastosowanie do wszystkich kontrolek serwera w strefie.
Zestaw kontrolek składników Web Part używa WebPartChrome klasy do renderowania elementu chrome dla WebPart kontrolek. Ponadto ta klasa umożliwia deweloperom dostosowywanie renderowania każdej pojedynczej sekcji (na przykład nagłówka lub stopki) WebPart kontrolek w WebPartZoneBase strefie bez konieczności obsługi renderowania wszystkich kontrolek dla tych kontrolek. Możesz na przykład zastąpić metodę CreateWebPartChromeStyle w celu dostosowania niektórych określonych atrybutów stylu zastosowanych do WebPartZoneBase strefy, ale możesz polegać na domyślnym renderowaniu, aby obsłużyć resztę.
Klasa WebPartChrome zawiera kilka ważnych metod, które są przydatne, gdy chcesz zastąpić renderowanie WebPart kontrolek. Jedną z nich jest CreateWebPartChromeStyle metoda, która umożliwia zmianę atrybutów stylu obiektu skojarzonego Style z obiektem WebPartChrome używanym do renderowania kontrolki. Innym jest WebPartChrome konstruktor, który jest używany podczas zastępowania CreateWebPartChrome metody w klasie niestandardowej WebPartZoneBase w celu utworzenia wystąpienia obiektu niestandardowego WebPartChrome . Inną przydatną metodą jest RenderPartContents metoda , której można użyć do kontrolowania renderowania obszaru zawartości kontrolek w strefie (w przeciwieństwie do elementów chrome, takich jak nagłówki, stopki i paski tytułu). Metoda GetWebPartVerbs umożliwia wykluczenie niektórych czasowników z renderowania, jeśli z jakiegoś powodu nie chcesz, aby użytkownicy widzieli te czasowniki w interfejsie użytkownika. Na koniec, jeśli chcesz uzyskać pełną kontrolę programową nad wszystkimi aspektami renderowania WebPart kontrolek, możesz zastąpić metodę RenderWebPart .
Przydatne są również kilka właściwości WebPartChrome klasy. Właściwości Zone i WebPartManager zapewniają odwołania do strefy skojarzonej odpowiednio z obiektem WebPartChrome i bieżącym WebPartManager wystąpieniem.
Uwagi dotyczące dziedziczenia
Dziedzicz z WebPartChrome klasy, gdy chcesz zastąpić domyślne renderowanie niektórych sekcji kontrolek WebPart lub serwerów. Opcjonalnie można zastąpić metodę CreateWebPartChromeStyle(WebPart, PartChromeType) , GetWebPartVerbs(WebPart) metodę , a zwłaszcza RenderPartContents(HtmlTextWriter, WebPart) metody lub RenderWebPart(HtmlTextWriter, WebPart) w celu dostosowania renderowania. Aby użyć WebPartChrome niestandardowej WebPart klasy dla kontrolek w strefie, utwórz strefę niestandardową pochodną WebPartZoneBase klasy i przesłoń jej CreateWebPartChrome() metodę. Aby uzyskać szczegółowe informacje na temat używania obiektu podrzędnego WebPartChrome w strefie, zobacz sekcję Przykład.
Konstruktory
WebPartChrome(WebPartZoneBase, WebPartManager) |
Inicjuje nowe wystąpienie kontrolki. |
Właściwości
DragDropEnabled |
Pobiera wartość wskazującą, czy kontrolki można przeciągać do i z strefy. |
WebPartManager |
Pobiera odwołanie do bieżącego WebPartManager wystąpienia. |
Zone |
Pobiera odwołanie do skojarzonej WebPartZoneBase strefy. |
Metody
CreateWebPartChromeStyle(WebPart, PartChromeType) |
Tworzy obiekt stylu, który dostarcza atrybuty stylu dla każdej WebPart kontrolki renderowanej przez WebPartChrome obiekt. |
Equals(Object) |
Określa, czy dany obiekt jest taki sam, jak bieżący obiekt. (Odziedziczone po Object) |
FilterWebPartVerbs(WebPartVerbCollection, WebPart) |
Wyklucza określone czasowniki z renderowania na podstawie kryteriów dostarczonych przez dewelopera. |
GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
GetType() |
Type Pobiera wartość bieżącego wystąpienia. (Odziedziczone po Object) |
GetWebPartChromeClientID(WebPart) |
Pobiera identyfikator klienta dla WebPartChrome obiektu w postaci renderowanej na stronie sieci Web. |
GetWebPartTitleClientID(WebPart) |
Pobiera identyfikator klienta dla komórki tabeli zawierającej tytuł kontrolki WebPart . |
GetWebPartVerbs(WebPart) |
Pobiera kolekcję zleceń, które powinny być renderowane za pomocą kontrolki WebPart . |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
PerformPreRender() |
Wykonuje zadania, które należy wykonać przed renderowaniem WebPart kontrolek. |
RenderPartContents(HtmlTextWriter, WebPart) |
Renderuje główny obszar zawartości kontrolki WebPart , z wyłączeniem nagłówka i stopki. |
RenderWebPart(HtmlTextWriter, WebPart) |
Renderuje pełną WebPart kontrolkę ze wszystkimi jej sekcjami. |
ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |