Freigeben über


ControlDesigner-Klasse

Stellt eine Basisklasse für Steuerelement-Designer zum Erweitern des Verhaltens eines Webserversteuerelements im Entwurfsmodus bereit.

Namespace: System.Web.UI.Design
Assembly: System.Design (in system.design.dll)

Syntax

'Declaration
Public Class ControlDesigner
    Inherits HtmlControlDesigner
'Usage
Dim instance As ControlDesigner
public class ControlDesigner : HtmlControlDesigner
public ref class ControlDesigner : public HtmlControlDesigner
public class ControlDesigner extends HtmlControlDesigner
public class ControlDesigner extends HtmlControlDesigner

Hinweise

Die ControlDesigner-Klasse stellt eine Basisklasse für Steuerelement-Designer bereit, von der geerbt werden kann und die erweitert werden kann, um zur Entwurfszeit Unterstützung für ein Webserversteuerelement in einem Entwurfshost wie Visual Studio 2005 bereitzustellen.

Das Objektmodell für das Arbeiten mit Entwurfszeitrendering ist gegenüber früheren Versionen verbessert worden. Dabei ermöglichen die folgenden neuen Basisklassen Zugriff auf das vereinfachte Objektmodell:

Automatische Formatierung

Sie können verschiedene automatische und vordefinierte Formate erstellen, die die Arbeit von Seitenentwicklern vereinfachen können, die benutzerdefinierten Webserversteuerelementen komplexe Formatänderungen zuweisen. So bietet z. B. das TableDesigner-Steuerelement, das von der ControlDesigner-Klasse abgeleitet ist, viele automatische Formate. Wenn Sie automatische Formatierungen in benutzerdefinierten Steuerelementen implementieren und bereitstellen möchten, verwenden Sie folgende Features:

Aktionslisten (Smarttags)

Aktionslisten sind Menüs mit wichtigen oder häufig verwendeten Aufgaben, die ein Seitenentwickler, der ein bestimmtes Steuerelement verwendet, in einer Entwurfszeit-Benutzeroberfläche wie Visual Studio 2005 ausführen kann. So könnte z. B. in der Entwurfszeitansicht eines Steuerelements ein Menü mit verfügbaren Aufgaben bereitgestellt werden. Dazu könnte auch die Aufgabe zählen, das Steuerelement automatisch zu formatieren. Weitere Informationen zu Aktionslisten finden Sie unter den folgenden Features:

Steuerelement-Designer-Bereiche

Designerbereiche sind bearbeitbare Bereiche in der Entwurfszeitansicht eines Webserversteuerelements. Dieses Feature ermöglicht zur Entwurfszeit eine WYSIWYG-ähnliche Bearbeitung von Vorlageninhalten, inneren Steuerelementen und Eigenschaften. Sie können mithilfe des Steuerelement-Designers Steuerelemente in Bereichen erstellen oder die Toolbox verwenden, um Steuerelemente per Drag & Drop in Bereichen abzulegen. Für das Verwalten von Bereichen werden folgende Features verwendet:

Vorlagen

Das Modell für das Erstellen einer Benutzeroberfläche für die Bearbeitung von aus einer Vorlage gebildeten Steuerelementen zur Entwurfszeit, beispielsweise eines GridView-Steuerelements, wurde im Vergleich zu früheren Versionen erheblich verbessert. Sie können komplexe benutzerdefinierte Steuerelemente erstellen, die Vorlagen für verschiedene Teile des Steuerelements enthalten. Solche benutzerdefinierten Steuerelement-Designer können Seitenentwickler unterstützen, die Vorlagen mit folgenden Features bearbeiten:

Entwurfszeitrendering

Die ControlDesigner-Klasse verfügt über die folgenden Methoden, die ein Entwurfszeitrendering des Webserversteuerelements unterstützen. Die meisten dieser Methoden sind gegenüber früheren Versionen gleich geblieben:

Beispiel

Im folgenden Codebeispiel wird veranschaulicht, wie eine von der ControlDesigner-Klasse abgeleitete einfache Designer-Klasse erstellt wird. Dieser Steuerelement-Designer unterstützt eine benutzerdefinierte TextControl-Klasse und stellt einen Befehl für das Ändern der Textgröße eines Steuerelements zur Entwurfszeit bereit. Zum Zuordnen des Steuerelements zum Steuerelement-Designer wird dieser in der TextControl-Klasse in einer DesignerAttribute-Objektdeklaration angegeben. Die Funktion für das Beibehalten von Eigenschaftenänderungen aus dem Designer im HTML-Markup finden Sie in der ToggleTextSize-Methode der benutzerdefinierten ActionList-Klasse.

Fügen Sie zum Ausführen des Beispiels einen Verweis auf die Assembly System.Design.dll hinzu, und kompilieren Sie den Code.

Imports Microsoft.VisualBasic
Imports System.Web.UI
Imports System.Web.UI.Design
Imports System.Web.UI.WebControls
Imports System.ComponentModel
Imports System.ComponentModel.Design

Namespace ASPNet.Design.Samples.VB

    ' Simple text Web control renders a text string.
    ' This control is associated with the TextSizeWebControlDesigner.
    <DesignerAttribute(GetType(TextSizeWebControlDesigner)), _
        ToolboxData("<{0}:TextControl runat='server'></{0}:TextControl>")> _
    Public Class TextControl
        Inherits Label

        Private _largeText As Boolean = True

        ' Constructor
        Public Sub New()
            Text = "Test Phrase"
            SetSize()
        End Sub

        ' Determines whether the text is large or small
        <Bindable(True), Category("Appearance"), DefaultValue(True)> _
        Public Property LargeText() As Boolean
            Get
                Return _largeText
            End Get
            Set(ByVal value As Boolean)
                _largeText = value
                SetSize()
            End Set
        End Property

        ' Applies the LargeText property to the control
        Private Sub SetSize()
            If LargeText Then
                Me.Font.Size = FontUnit.XLarge
            Else
                Me.Font.Size = FontUnit.Small
            End If
        End Sub
    End Class


    ' This control designer offers DesignerActionList commands
    ' that can alter the design time html of the associated control.
    Public Class TextSizeWebControlDesigner
        Inherits ControlDesigner

        Private _actionLists As DesignerActionListCollection

        ' Do not allow direct resizing of the control
        Public Overrides ReadOnly Property AllowResize() As Boolean
            Get
                Return False
            End Get
        End Property

        ' Return a custom ActionList collection
        Public Overrides ReadOnly Property ActionLists() As System.ComponentModel.Design.DesignerActionListCollection
            Get
                If IsNothing(_actionLists) Then
                    _actionLists = New DesignerActionListCollection()
                    _actionLists.AddRange(MyBase.ActionLists)

                    ' Add a custom DesignerActionList
                    _actionLists.Add(New ActionList(Me))
                End If

                Return _actionLists
            End Get
        End Property

        ' Create a custom class of DesignerActionList
        Public Class ActionList
            Inherits DesignerActionList
            Private _parent As TextSizeWebControlDesigner
            Private _items As DesignerActionItemCollection

            ' Constructor
            Public Sub New(ByRef parent As TextSizeWebControlDesigner)
                MyBase.New(parent.Component)
                _parent = parent
            End Sub

            ' Create the ActionItem collection and add one command
            Public Overrides Function GetSortedActionItems() As DesignerActionItemCollection
                If IsNothing(_items) Then
                    _items = New DesignerActionItemCollection()
                    _items.Add(New DesignerActionMethodItem(Me, "ToggleLargeText", "Toggle Text Size", True))
                End If

                Return _items
            End Function

            ' ActionList command to change the text size
            Private Sub ToggleLargeText()
                ' Get a reference to the parent designer's associated control
                Dim ctl As TextControl = CType(_parent.Component, TextControl)

                ' Get a reference to the control's LargeText property
                Dim propDesc As PropertyDescriptor = TypeDescriptor.GetProperties(ctl)("LargeText")

                ' Get the current value of the property
                Dim v As Boolean = CType(propDesc.GetValue(ctl), Boolean)
                ' Toggle the property value
                propDesc.SetValue(ctl, (Not v))
            End Sub
        End Class
    End Class
End Namespace

...
<%@ Page Language="VB" %>
<%@ Register TagPrefix="aspSample" 
    Namespace="ASPNet.Design.Samples.VB" %>
<!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>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
        <aspSample:TextControl ID=TextControl1 runat="server">
        </aspSample:TextControl>
    
    </div>
    </form>
</body>
</html>
using System;
using System.Web.UI;
using System.Drawing;
using System.Web.UI.Design;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.ComponentModel.Design;

namespace ASPNet.Design.Samples.CS
{
    // Simple text Web control renders a text string.
    // This control is associated with the TextSizeWebControlDesigner.
    [DesignerAttribute(typeof(TextSizeWebControlDesigner)),
    ToolboxData("<{0}:TextControl runat=\"server\"></{0}:TextControl>")]
    public class TextControl : Label
    {
        private bool _largeText = true;

        // Constructor
        public TextControl()
        {
            Text = "Test Phrase";
            SetSize();
        }

        // Determines whether the text is large or small
        [Bindable(true), Category("Appearance"), DefaultValue("true")]
        public bool LargeText
        {
            get { return _largeText; }
            set
            {
                _largeText = value;
                SetSize();
            }
        }

        // Applies the LargeText property to the control
        private void SetSize()
        {
            if (LargeText)
                this.Font.Size = FontUnit.XLarge;
            else
                this.Font.Size = FontUnit.Small;
        }
    }

    // This control designer offers DesignerActionList commands
    // that can alter the design time html of the associated control.
    public class TextSizeWebControlDesigner : ControlDesigner
    {
        private DesignerActionListCollection _actionLists = null;

        // Do not allow direct resizing of the control
        public override bool AllowResize
        {
            get { return false; }
        }

        // Return a custom ActionList collection
        public override DesignerActionListCollection ActionLists
        {
            get
            {
                if (_actionLists == null)
                {
                    _actionLists = new DesignerActionListCollection();
                    _actionLists.AddRange(base.ActionLists);

                    // Add a custom DesignerActionList
                    _actionLists.Add(new ActionList(this));
                }
                return _actionLists;
            }
        }

        public class ActionList : DesignerActionList
        {
            private TextSizeWebControlDesigner _parent;
            private DesignerActionItemCollection _items;

            // Constructor
            public ActionList(TextSizeWebControlDesigner parent)
                : base(parent.Component)
            {
                _parent = parent;

            }

            // Create the ActionItem collection and add one command
            public override DesignerActionItemCollection GetSortedActionItems()
            {
                if (_items == null)
                {
                    _items = new DesignerActionItemCollection();
                    _items.Add(new DesignerActionMethodItem(this, "ToggleLargeText", "Toggle Text Size", true));
                }
                return _items;
            }

            // ActionList command to change the text size
            private void ToggleLargeText()
            {
                // Get a reference to the parent designer's associated control
                TextControl ctl = (TextControl)_parent.Component;

                // Get a reference to the control's LargeText property
                PropertyDescriptor propDesc = TypeDescriptor.GetProperties(ctl)["LargeText"];

                // Get the current value of the property
                bool v = (bool)propDesc.GetValue(ctl);

                // Toggle the property value
                propDesc.SetValue(ctl, !v);
            }
        }
    }
}

...
<%@ Page Language="C#" %>
<%@ Register TagPrefix="aspSample" 
    Namespace="ASPNet.Design.Samples.CS" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
    <aspSample:TextControl ID=TextControl1 runat="server">
    </aspSample:TextControl>

    
    </div>
    </form>
</body>
</html>

.NET Framework-Sicherheit

Vererbungshierarchie

System.Object
   System.ComponentModel.Design.ComponentDesigner
     System.Web.UI.Design.HtmlControlDesigner
      System.Web.UI.Design.ControlDesigner
         Abgeleitete Klassen

Threadsicherheit

Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Plattformen

Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

Siehe auch

Referenz

ControlDesigner-Member
System.Web.UI.Design-Namespace
TemplateGroup
DesignerAutoFormat
DesignerActionList
DesignerRegion
ContainerControlDesigner-Klasse
CompositeControlDesigner

Weitere Ressourcen

Übersicht über ASP.NET-Steuerelement-Designer
Architektur der Entwurfszeit
Entwurfszeitunterstützung für Web Forms
Der Beispielsteuerelement-Designer für Aktionslisten und Dienste