Share via


Formate in Serversteuerelementen

Formate bestimmen die visuelle Darstellung eines Steuerelements. Wenn Sie ein Formate unterstützendes Steuerelement entwickeln, empfiehlt sich die Ableitung von System.Web.UI.WebControls.WebControl, wodurch streng typisierte Eigenschaften (z. B. Font, Height, Width usw.) offen gelegt und Methoden zur Arbeit mit Formateigenschaften bereitgestellt werden. Einen Überblick über Formate in ASP.NET-Steuerelementen finden Sie unter Schnelleinstieg zu ASP.NET —> ASP.NET Web Forms —> Anwenden von Formaten auf Steuerelemente.

Die WebControl-Klasse bietet zwei Techniken zur Unterstützung von Formaten:

  • Offenlegen streng typisierter Formateigenschaften vom Typ System.Web.UI.WebControl.Style oder von Typen, die von System.Web.UI.WebControl.Style abgeleitet sind.
  • Ausgeben von Formaten als HTML-Attribute durch Hinzufügen von Name/Wert-Paaren zur WebControl.Style-Auflistung. Diese Technik sollte bei der Entwicklung von Steuerelementen nicht verwendet werden. Die Technik ist dafür gedacht, dass Benutzer vom Steuerelement nicht offen gelegte Formate als streng typisierte Eigenschaften zu diesem hinzufügen können. Die Steuerelementbenutzer können auf diese Weise Formate sowohl programmgesteuert als auch deklarativ festlegen. Siehe dazu Schnelleinstieg zu ASP.NET —> ASP.NET Web Forms —> Anwenden von Formaten auf Steuerelemente.

Offenlegen streng typisierter Formateigenschaften

Ein Webserversteuerelement (ein von WebControl abgeleitetes Serversteuerelement) erbt die WebControl.ControlStyle-Eigenschaft, welche das typisierte Format für das Steuerelement als Ganzes festlegt. Der Typ von ControlStyle ist Style. Dies ist eine Klasse, die die das Format betreffende Funktionalität einkapselt, wie in der folgenden Liste beschrieben.

  • Style besitzt Eigenschaften wie Font, Height, Width, ForeColor, BackColor sowie andere, die mit Formaten von Cascading Stylesheets korrespondieren. WebControl legt diese Formateigenschaften als Eigenschaften der obersten Ebene offen, indem sie an Untereigenschaften der eigenen ControlStyle-Eigenschaft delegiert werden.

  • Style legt zum Darstellen von Formaten als Attribute eines HtmlTextWriter-Objekts eine Methode (Style.AddAttributesToRender) offen. Dadurch wird WebControl in die Lage versetzt, die Formatdarstellung an die eigene ControlStyle-Eigenschaft zu delegieren.

    Hinweis   Wenn Sie die Render-Methode von WebControl außer Kraft setzen, müssen Sie sicherstellen, dass die von WebControl bereitgestellte grundlegende Darstellungsfunktionalität erhalten bleibt. Wenn Sie beispielsweise die Render-Methode dahingehend außer Kraft setzen, dass die Write-Methode der HtmlTextWriter-Instanz direkt aufgerufen wird, geht die in WebControl integrierte Formatdarstellungsfunktionalität verloren. Ein Beispiel für die empfohlene Technik zum Außerkraftsetzen von Render finden Sie unter Beispiele für die Darstellung eines Serversteuerelements.

  • Style bietet Methoden zum Kopieren (Style.CopyFrom) und Zusammenführen (Style.MergeWith) von Formaten. Ein Beispiel für die Verwendung dieser Methoden finden Sie unter Beispiel für ein datengebundenes Steuerelement mit Vorlagen.

  • Style implementiert die IStateManager-Schnittstelle, die jene Statusverwaltungsfunktionalität bereitstellt, die es einem Steuerelement gestattet, die Statusverwaltung an seine Formateigenschaften zu delegieren. Als Teil des IStateManager-Vertrags implementiert Style beispielsweise die Methoden LoadViewState, SaveViewState und TrackViewState. Style verfügt außerdem über einen überladenen Konstruktor, der einen StateBag-Typ als Argument benötigt. WebControl erstellt ControlStyle durch Weiterleiten von ViewState an den Style-Konstruktor, wodurch es dem Steuerelementformat ermöglicht wird, auf den Ansichtsstatus zuzugreifen. Ein Beispiel für die Delegierung einer angepassten Statusverwaltung an die Formateigenschaften eines Steuerelements finden Sie unter Beispiel für ein datengebundenes Steuerelement mit Vorlagen.

Während der Standardtyp der ControlStyle-Eigenschaft Style ist, kann ein Webserversteuerelement seinen Steuerelementformat auf eine beliebige von Style abgeleitete Klasse festlegen, indem die WebControl.CreateControlStyle-Methode außer Kraft gesetzt wird, wie im folgenden Beispiel zu sehen.

protected override Style CreateControlStyle() 
{
    // Note that the constructor of Style takes ViewState as an   
    // argument. 
    TableStyle style = new TableStyle(ViewState);
    // Set up default initial state.
    style.CellSpacing = 0;
    return style;
}
[Visual Basic]
Protected Overrides Function CreateControlStyle() As Style
    ' Note that the constructor of Style takes ViewState as an   
    ' argument. 
    Dim style As New TableStyle(ViewState)
    ' Set up default initial state.
    style.CellSpacing = 0
    Return style
End Function

Neben dem Basistyp Style bietet der System.Web.UI.WebControls-Namespace weitere Formattypen, z. B. TableStyle und TableItemStyle. Sie können zusätzliche streng typisierte Formate durch Ableitung von Style (oder von einer anderen von Style abgeleiteten Klasse) und Außerkraftsetzen oder Hinzufügen von Membern definieren. So wie WebControl Untereigenschaften von Style als Eigenschaften der obersten Ebene offen legt, können Sie Untereigenschaften des benutzerdefinierten Formattyps als Eigenschaften der obersten Ebene offen legen. Table bestimmt beispielsweise ControlStyle als TableStyle und legt Untereigenschaften von TableStyle als Eigenschaften der obersten Ebene offen, z. B. CellPadding, CellSpacing und Gridlines. Das folgende Codefragment aus Beispiel für ein datengebundenes Steuerelement mit Vorlagen zeigt, wie das benutzerdefinierte TemplatedList-Steuerelement die CellPadding-Untereigenschaft von ControlStyle als Eigenschaft der obersten Ebene offen legt.

public virtual int CellPadding {
                  get {
                        if (ControlStyleCreated == false) {
                              return -1;
                        }
                        return ((TableStyle)ControlStyle).CellPadding;
                  }
                  set {
                        ((TableStyle)ControlStyle).CellPadding = value;
                  }
            } 
[Visual Basic]
Public Overridable Property CellPadding() As Integer
   Get
      If ControlStyleCreated = False Then
         Return - 1
      End If
      Return CType(ControlStyle, TableStyle).CellPadding
   End Get
   Set
      CType(ControlStyle, TableStyle).CellPadding = value
   End Set
End Property

Die folgenden Methoden von WebControl ermöglichen es dem Benutzer eines Steuerelements, die ControlStyle-Eigenschaft des Steuerelements zu ändern.

  • Die WebControl.ApplyStyle-Methode kopiert ein angegebenes Format nach ControlStyle und überschreibt vorhandene Elemente.
  • Die WebControl.ApplyStyle-Methode führt ein angegebenes Format mit ControlStyle zusammen, ohne vorhandene Elemente zu überschreiben.

Beispiele für die Verwendung dieser Methoden finden Sie unter Beispiel für ein datengebundenes Steuerelement mit Vorlagen.

Offenlegen zusätzlicher Formateigenschaften für untergeordnete Steuerelemente

Während die ControlStyle-Eigenschaft das allgemeine Format eines Webserversteuerelements bestimmt, kann ein zusammengesetztes Webserversteuerelement (eines mit untergeordneten Steuerelementen) zusätzliche auf die untergeordneten Steuerelemente anzuwendende Formateigenschaften offen legen. Ein Steuerelement muss die angepasste Statusverwaltung implementieren, um diese zusätzlichen Formate bei Clientschleifen zu erhalten. Die folgende Liste beschreibt die Hauptschritte zur Bereitstellung zusätzlicher Formate.

So legen Sie Formate für untergeordnete Steuerelemente offen

  1. Definieren Sie eine oder mehrere von Style abgeleitete Eigenschaften. Das benutzerdefinierte TemplatedList-Steuerelement, beschrieben unter Beispiel für ein datengebundenes Steuerelement mit Vorlagen, legt zusätzliche Formate offen, wie im folgenden Codefragment demonstriert. Beachten Sie, dass in diesem Fall bei der Erstellung eines neuen Style-Objekts die ViewState-Eigenschaft des Steuerelements nicht an den Style-Konstruktor weitergegeben wird. Die ViewState-Eigenschaft eines Steuerelements wird nur an den Style-Konstruktor weitergegeben, wenn eine ControlStyle-Eigenschaft des Steuerelements erstellt wird. (Dies gilt nicht für andere Eigenschaften vom Typ Style.) Beachten Sie außerdem, dass das Steuerelement die Anzeigestatusverfolgung an die Formateigenschaft delegiert.

    public virtual TableItemStyle AlternatingItemStyle {
                      get {
                            if (alternatingItemStyle == null) {
                                  alternatingItemStyle = new TableItemStyle();
                                  if (IsTrackingViewState)
                                        ((IStateManager)alternatingItemStyle).TrackViewState();
                            }
                            return alternatingItemStyle;
                      }
                }
    [Visual Basic]
    Public Overridable ReadOnly Property AlternatingItemStyle() As TableItemStyle
       Get
          If _alternatingItemStyle Is Nothing Then
             _alternatingItemStyle = New TableItemStyle()
             If IsTrackingViewState Then
                CType(_alternatingItemStyle, IStateManager).TrackViewState()
             End If
          End If
          Return _alternatingItemStyle
       End Get
    End Property
    
  2. Wenden Sie die Formate auf die untergeordneten Steuerelemente an. Ein Beispiel ist die PrepareControlHierarchy-Methode unter Beispiel für ein datengebundenes Steuerelement mit Vorlagen, die auch das Zusammenführen von Formaten demonstriert. Sie sollten Formate in der Darstellungsphase auf die untergeordneten Steuerelemente anwenden (siehe voriges Beispiel), so dass sie im Anzeigestatus nicht beibehalten werden.

  3. Setzen Sie die SaveViewState-Methode außer Kraft, um die zusätzlichen Formateigenschaften in ViewState zu speichern. Da Style-Objekte ihren eigenen Status verwalten, muss ein Steuerelement SaveViewState für seine Formateigenschaften aufrufen, um die Objekte zu erhalten, die zur ViewState-Eigenschaft hinzugefügt werden müssen. Das folgende Beispiel aus Beispiel für ein datengebundenes Steuerelement mit Vorlagen zeigt, wie ein Steuerelement die angepasste Statusverwaltung an seine Formateigenschaften delegiert.

    protected override object SaveViewState() 
    {
        // Customized state management to handle saving 
        // state of contained objects such as styles.
        object baseState = base.SaveViewState();
        object itemStyleState = (itemStyle != null) ? 
            ((IStateManager)itemStyle).SaveViewState() : null;
        object selectedItemStyleState = (selectedItemStyle != null) ? 
            ((IStateManager)selectedItemStyle).SaveViewState() : null;
        object alternatingItemStyleState = (alternatingItemStyle != null) ? 
            ((IStateManager)alternatingItemStyle).SaveViewState() : null;
    
        object[] myState = new object[4];
        myState[0] = baseState;
        myState[1] = itemStyleState;
        myState[2] = selectedItemStyleState;
        myState[3] = alternatingItemStyleState;
    
        return myState;
    }
    [Visual Basic]
    Protected Overrides Function SaveViewState() As Object
        ' Customized state management to handle saving 
        ' state of contained objects such as styles.
        Dim baseState As Object = MyBase.SaveViewState()
        Dim itemStyleState As Object 
        Dim selectedItemStyleState As Object
        Dim alternatingItemStyleState As Object
    
        If Not (_itemStyle Is Nothing) Then 
            itemStyleState = CType(_itemStyle, IStateManager).SaveViewState()
        Else
            itemStyleState = Nothing
        End If
    
        If Not (_selectedItemStyle Is Nothing) Then
            selectedItemStyleState = CType(_selectedItemStyle, IStateManager).SaveViewState()
        Else
           selectedItemStyleState = Nothing
        End If
    
        If Not (_alternatingItemStyle Is Nothing) Then
            alternatingItemStyleState = CType(_alternatingItemStyle, IStateManager).SaveViewState()
        Else
            alternatingItemStyleState = Nothing
        End If
    
        Dim myState(4) As Object
        myState(0) = baseState
        myState(1) = itemStyleState
        myState(2) = selectedItemStyleState
        myState(3) = alternatingItemStyleState
    
        Return myState
    End Function
    
  4. Setzen Sie die LoadViewState-Methode außer Kraft, um die Wiederherstellung der zusätzlichen Formateigenschaften von ViewState anzupassen. Die zusätzlichen zu ViewState hinzugefügten Objekte müssen jetzt in derselben Reihenfolge abgerufen werden, in der sie hinzugefügt wurden. Das folgende Beispiel aus Beispiel für ein datengebundenes Steuerelement mit Vorlagen zeigt, wie ein Steuerelement die angepasste Statuswiederherstellung an seine Formateigenschaften delegiert.

    protected override void LoadViewState(object savedState) 
    {
        // Customized state management to handle 
        // state restoration of contained objects.
    
        if (savedState != null) 
        {
            object[] myState = (object[])savedState;
    
            if (myState[0] != null)
                base.LoadViewState(myState[0]);
            if (myState[1] != null)
                ((IStateManager)ItemStyle).LoadViewState(myState[1]);
            if (myState[2] != null)
                ((IStateManager)SelectedItemStyle).LoadViewState(myState[2]);
            if (myState[3] != null)
                ((IStateManager)AlternatingItemStyle).LoadViewState(myState[3]);
        }
    }
    [Visual Basic]
    Protected Overrides Sub LoadViewState(savedState As Object)
        ' Customized state management to handle saving 
        ' state of contained objects.
        If Not (savedState Is Nothing) Then
            Dim myState As Object() = CType(savedState, Object())
    
            If Not (myState(0) Is Nothing) Then
                MyBase.LoadViewState(myState(0))
            End If
            If Not (myState(1) Is Nothing) Then
                CType(ItemStyle, IStateManager).LoadViewState(myState(1))
            End If
            If Not (myState(2) Is Nothing) Then
                CType(SelectedItemStyle, IStateManager).LoadViewState(myState(2))
            End If
            If Not (myState(3) Is Nothing) Then
                CType(AlternatingItemStyle, IStateManager).LoadViewState(myState(3))
            End If
        End If
    End Sub
    

Ein Beispiel für ein Steuerelement, dass die auf seine untergeordneten Steuerelemente angewendeten Formateigenschaften offen legt, finden Sie unter Beispiel für ein datengebundenes Steuerelement mit Vorlagen.

Siehe auch

Beispiel für ein datengebundenes Steuerelement mit Vorlagen