ControlDesigner 类

定义

提供基控件设计器类,用于扩展 Web 服务器控件的设计模式行为。

public ref class ControlDesigner : System::Web::UI::Design::HtmlControlDesigner
public class ControlDesigner : System.Web.UI.Design.HtmlControlDesigner
type ControlDesigner = class
    inherit HtmlControlDesigner
Public Class ControlDesigner
Inherits HtmlControlDesigner
继承
派生

示例

下面的代码示例演示如何创建派生自 ControlDesigner 类的简单设计器类。 此控件设计器支持自定义 TextControl 类,并提供一个命令,用于在设计时更改控件的文本大小。 控件设计器通过在 类的对象TextControl声明中指定控件设计器DesignerAttribute来与控件相关联。 在自定义ActionList类的 方法中找到ToggleTextSize将属性更改从控件设计器保存到 HTML 标记的关键。

若要尝试此示例,请添加对 System.Design.dll 程序集的引用并编译代码。

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);
            }
        }
    }
}
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="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>
<%@ 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>

注解

ControlDesigner 提供了一个基控件设计器类,该类可从中继承和扩展,以便为设计主机(如 Visual Studio 2005)中的 Web 服务器控件提供设计时支持。

使用设计时呈现的对象模型比早期版本进行了改进,并使用以下新的基类来提供对简化对象模型的访问:

自动格式设置

可以创建各种自动和预定义的格式,以简化将复杂样式更改应用于自定义 Web 服务器控件的页面开发人员的过程。 例如, TableDesigner 派生自 类的 ControlDesigner 控件提供了许多要从中选择的自动格式。 若要在自定义控件中实现并提供自动格式设置,请使用以下功能:

智能标记) (操作列表

操作列表是重要或广泛使用的任务的菜单,使用控件的页面开发人员可以在设计时用户界面 (UI) (如 Visual Studio 2005)中执行这些任务。 例如,控件的设计时视图可以提供可用任务的菜单。 这包括自动设置控件格式的任务。 若要了解操作列表,请从以下功能开始:

控制Designer区域

区域是 Web 服务器控件的设计时视图中的可编辑区域。 此功能在设计时提供模板内容、内部控件和属性的类似 WYSIWYG 编辑。 你可以让控件设计器在区域中创建控件,也可以使用工具箱将控件拖放到区域中。 区域使用以下功能进行管理:

模板

用于创建用于设计时编辑模板化控件(例如控件) GridView 的 UI 的模型已大大改进。 可以创建包含控件各个部分模板的复杂自定义控件,并且自定义控件设计器可帮助页面开发人员修改模板具有以下功能:

Design-Time渲染

ControlDesigner 具有以下方法,以支持 Web 服务器控件的设计时呈现。 其中大多数方法与早期版本中的方法相同:

构造函数

ControlDesigner()

初始化 ControlDesigner 类的新实例。

属性

ActionLists

获取控件设计器的操作列表集合。

ActionLists

获取与设计器相关联的组件所支持的设计时操作列表。

(继承自 ComponentDesigner)
AllowResize

获取一个值,该值指示是否可以在设计时环境中调整控件的大小。

AssociatedComponents

获取与设计器所管理的组件关联的组件集合。

(继承自 ComponentDesigner)
AutoFormats

获取预定义自动格式设置方案的集合,这些方案将在设计时显示于关联控件的“自动套用格式”对话框中。

Behavior
已过时.

获取或设置与设计器关联的 DHTML 行为。

(继承自 HtmlControlDesigner)
Component

获取此设计器正在设计的组件。

(继承自 ComponentDesigner)
DataBindings

获取当前控件的数据绑定集合。

(继承自 HtmlControlDesigner)
DataBindingsEnabled

获取一个值,该值指示包含关联控件的区域是否支持数据绑定。

DesignerState

获取用于在设计时保持关联控件数据的对象。

DesignTimeElement
已过时.

获取一个设计时对象,该对象表示与设计图面上的 HtmlControlDesigner 对象关联的控件。

(继承自 HtmlControlDesigner)
DesignTimeElementView
已过时.

获取控件设计器的视图控件对象。

DesignTimeHtmlRequiresLoadComplete
已过时.

获取一个值,该值指示是否必须在设计宿主完成加载之后才能调用 GetDesignTimeHtml 方法。

Expressions

获取当前控件在设计时的表达式绑定。

(继承自 HtmlControlDesigner)
HidePropertiesInTemplateMode

获取一个值,该值指示当控件处于模板模式时,关联控件的属性是否被隐藏。

ID

获取或设置控件的 ID 字符串。

InheritanceAttribute

获取一个特性,该特性指示关联组件的继承类型。

(继承自 ComponentDesigner)
Inherited

获取一个值,该值指示是否继承此组件。

(继承自 ComponentDesigner)
InTemplateMode

获取一个值,该值指示控件在设计宿主中是否处于模板查看模式或模板编辑模式之一。 InTemplateMode 属性为只读。

IsDirty
已过时.

获取或设置一个值,该值指示 Web 服务器控件是否已被标记为已更改。

ParentComponent

获取此设计器的父组件。

(继承自 ComponentDesigner)
ReadOnly
已过时.

获取或设置一个值,该值指示控件的属性在设计时是否为只读。

RootDesigner

获取包含关联控件的 Web 窗体页的控件设计器。

SetTextualDefaultProperty

提供基控件设计器类,用于扩展 Web 服务器控件的设计模式行为。

(继承自 ComponentDesigner)
ShadowProperties

获取重写用户设置的属性值的集合。

(继承自 ComponentDesigner)
ShouldCodeSerialize
已过时.

获取或设置一个值,该值指示在序列化期间是否应为当前设计文档在代码隐藏文件中创建控件的字段声明。

(继承自 HtmlControlDesigner)
Tag

获取表示关联控件的 HTML 标记元素的对象。

TemplateGroups

获取一个模板组集合,其中每个模板组包含一个或多个模板定义。

UsePreviewControl

获取一个值,该值指示控件设计器是否使用临时预览控件来生成设计时 HTML 标记。

Verbs

获取与设计器相关联的组件所支持的设计时谓词。

(继承自 ComponentDesigner)
ViewControl

获取或设置可用于预览设计时 HTML 标记的 Web 服务器控件。

ViewControlCreated

获取或设置一个值,该值指示是否已创建 View 控件以在设计图面上显示。

Visible

获取指示该控件在设计时是否可见的值。

方法

CreateErrorDesignTimeHtml(String)

创建在设计时显示指定错误消息的 HTML 标记。

CreateErrorDesignTimeHtml(String, Exception)

创建在设计时显示指定异常错误消息的 HTML 标记。

CreatePlaceHolderDesignTimeHtml()

提供一个简单的矩形占位符表示形式,该表示形式显示该控件的类型和 ID。

CreatePlaceHolderDesignTimeHtml(String)

提供一个简单的矩形占位符表示形式,该表示形式显示该控件的类型和 ID 以及指定的附加说明或信息。

CreateViewControl()

返回要在设计图面上查看或呈现的关联控件的副本。

Dispose()

释放由 ComponentDesigner 使用的所有资源。

(继承自 ComponentDesigner)
Dispose(Boolean)

释放由 HtmlControlDesigner 对象占用的非托管资源,还可以选择释放托管资源。

(继承自 HtmlControlDesigner)
DoDefaultAction()

在源代码文件中为组件的默认事件创建方法签名,并将用户的光标定位到该位置。

(继承自 ComponentDesigner)
Equals(Object)

确定指定对象是否等于当前对象。

(继承自 Object)
GetBounds()

检索矩形的坐标,该矩形表示设计图面上显示的控件的边界。

GetDesignTimeHtml()

检索用于在设计时表示控件的 HTML 标记。

GetDesignTimeHtml(DesignerRegionCollection)

检索用当前控件设计器区域显示控件并填充集合的 HTML 标记。

GetDesignTimeResourceProviderFactory(IServiceProvider)

根据站点配置文件中的全球化设置返回相应的资源提供程序工厂。

GetEditableDesignerRegionContent(EditableDesignerRegion)

返回关联控件设计时视图中可编辑区域的内容。

GetEmptyDesignTimeHtml()

检索表示在设计时将不具有可视表示形式的运行时 Web 服务器控件的 HTML 标记。

GetErrorDesignTimeHtml(Exception)

检索 HTML 标记,该标记提供有关指定异常的信息。

GetHashCode()

作为默认哈希函数。

(继承自 Object)
GetPersistenceContent()

在设计时检索该控件的持久内部 HTML 标记。

GetPersistInnerHtml()
已过时.

检索控件的持久性内部 HTML 标记。

GetService(Type)

尝试从设计器组件的设计模式站点检索指定类型的服务。

(继承自 ComponentDesigner)
GetType()

获取当前实例的 Type

(继承自 Object)
GetViewRendering()

检索一个对象,该对象包含关联控件的内容和区域的设计时标记。

GetViewRendering(Control)

检索一个对象,该对象包含指定控件的内容和区域的设计时标记。

GetViewRendering(ControlDesigner)

检索一个对象,该对象包含指定控件设计器关联控件的内容和区域的设计时标记。

Initialize(IComponent)

初始化控件设计器并加载指定的组件。

InitializeExistingComponent(IDictionary)

重新初始化现有组件。

(继承自 ComponentDesigner)
InitializeNewComponent(IDictionary)

初始化新创建的组件。

(继承自 ComponentDesigner)
InitializeNonDefault()
已过时.
已过时.

对已初始化为非默认设置的导入组件的设置进行初始化。

(继承自 ComponentDesigner)
Invalidate()

使显示在设计图面上的控件的整个区域无效,并向控件设计器发送重新绘制控件的信号。

Invalidate(Rectangle)

使显示在设计图面上的控件的指定区域无效,并向控件设计器发送重新绘制控件的信号。

InvokeGetInheritanceAttribute(ComponentDesigner)

获取指定 InheritanceAttributeComponentDesigner

(继承自 ComponentDesigner)
InvokeTransactedChange(IComponent, TransactedChangeCallback, Object, String)

使用指定参数将一系列更改包装到事务中,这些指定参数可以通过设计宿主的撤消功能作为一个单元进行回滚。

InvokeTransactedChange(IComponent, TransactedChangeCallback, Object, String, MemberDescriptor)

使用指定参数将一系列更改包装到事务中,这些指定参数可以通过设计宿主的撤消功能作为一个单元进行回滚。

InvokeTransactedChange(IServiceProvider, IComponent, TransactedChangeCallback, Object, String, MemberDescriptor)

使用指定参数将一系列更改包装到事务中,这些指定参数可以通过设计宿主的撤消功能作为一个单元进行回滚。

IsPropertyBound(String)
已过时.

检索一个值,该值指示关联控件上的指定属性是否是数据绑定的。

Localize(IDesignTimeResourceWriter)

使用提供的资源编写器将关联控件的可本地化属性保持到设计宿主中的某个资源。

MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
OnAutoFormatApplied(DesignerAutoFormat)

对关联控件应用预定义的自动格式设置方案后调用。

OnBehaviorAttached()

将控件设计器附加到 Behavior 对象时调用。

OnBehaviorAttached()
已过时.

当某个行为与该元素关联时被调用。

(继承自 HtmlControlDesigner)
OnBehaviorDetaching()
已过时.

当某个行为与该元素取消关联时被调用。

(继承自 HtmlControlDesigner)
OnBindingsCollectionChanged(String)
已过时.

在数据绑定集合发生更改时调用。

OnClick(DesignerRegionMouseEventArgs)

当用户在设计时单击关联控件时由设计宿主调用。

OnComponentChanged(Object, ComponentChangedEventArgs)

在关联控件发生更改时调用。

OnComponentChanging(Object, ComponentChangingEventArgs)

表示将处理关联控件的 ComponentChanging 事件的方法。

OnControlResize()
已过时.

关联的 Web 服务器控件的大小在设计宿主中发生设计时调整后被调用。

OnPaint(PaintEventArgs)

当控件设计器在设计图面上绘制关联控件,且 CustomPaint 的值为 true 时调用。

OnSetComponentDefaults()
已过时.
已过时.

设置组件的默认属性。

(继承自 ComponentDesigner)
OnSetParent()

提供一种在将关联控件附加到父控件时执行附加处理的方式。

(继承自 HtmlControlDesigner)
PostFilterAttributes(IDictionary)

允许设计器从通过 TypeDescriptor 公开的特性集中更改或移除项。

(继承自 ComponentDesigner)
PostFilterEvents(IDictionary)

允许设计器从通过 TypeDescriptor 公开的事件集中更改或移除项。

(继承自 ComponentDesigner)
PostFilterProperties(IDictionary)

允许设计器从通过 TypeDescriptor 公开的属性集中更改或移除项。

(继承自 ComponentDesigner)
PreFilterAttributes(IDictionary)

允许设计器在通过 TypeDescriptor 公开的特性集中添加项。

(继承自 ComponentDesigner)
PreFilterEvents(IDictionary)

设置在设计时为用于组件的 TypeDescriptor 对象公开的事件列表。

(继承自 HtmlControlDesigner)
PreFilterProperties(IDictionary)

在设计时向设计宿主中的“属性”网格添加属性或从中移除属性,或提供可能与关联控件上的属性相对应的新设计时属性。

RaiseComponentChanged(MemberDescriptor, Object, Object)

通知 IComponentChangeService 此组件已被更改。

(继承自 ComponentDesigner)
RaiseComponentChanging(MemberDescriptor)

通知 IComponentChangeService 此组件即将被更改。

(继承自 ComponentDesigner)
RaiseResizeEvent()
已过时.

引发 OnControlResize() 事件。

RegisterClone(Object, Object)

注册克隆控件中的内部数据。

SetEditableDesignerRegionContent(EditableDesignerRegion, String)

指定设计时控件可编辑区域的内容。

SetRegionContent(EditableDesignerRegion, String)

指定控件设计时视图中可编辑区域的内容。

SetViewFlags(ViewFlags, Boolean)

将指定的按位 ViewFlags 枚举分配给指定的标志值。

ToString()

返回表示当前对象的字符串。

(继承自 Object)
UpdateDesignTimeHtml()

通过调用 GetDesignTimeHtml 方法刷新关联 Web 服务器控件的设计时 HTML 标记。

显式接口实现

IDesignerFilter.PostFilterAttributes(IDictionary)

有关此成员的说明,请参见 PostFilterAttributes(IDictionary) 方法。

(继承自 ComponentDesigner)
IDesignerFilter.PostFilterEvents(IDictionary)

有关此成员的说明,请参见 PostFilterEvents(IDictionary) 方法。

(继承自 ComponentDesigner)
IDesignerFilter.PostFilterProperties(IDictionary)

有关此成员的说明,请参见 PostFilterProperties(IDictionary) 方法。

(继承自 ComponentDesigner)
IDesignerFilter.PreFilterAttributes(IDictionary)

有关此成员的说明,请参见 PreFilterAttributes(IDictionary) 方法。

(继承自 ComponentDesigner)
IDesignerFilter.PreFilterEvents(IDictionary)

有关此成员的说明,请参见 PreFilterEvents(IDictionary) 方法。

(继承自 ComponentDesigner)
IDesignerFilter.PreFilterProperties(IDictionary)

有关此成员的说明,请参见 PreFilterProperties(IDictionary) 方法。

(继承自 ComponentDesigner)
ITreeDesigner.Children

有关此成员的说明,请参见 Children 属性。

(继承自 ComponentDesigner)
ITreeDesigner.Parent

有关此成员的说明,请参见 Parent 属性。

(继承自 ComponentDesigner)

适用于

另请参阅