ControlDesigner 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
提供基控件设计器类,用于扩展 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 服务器控件提供设计时支持。
使用设计时呈现的对象模型比早期版本进行了改进,并使用以下新的基类来提供对简化对象模型的访问:
ControlDesigner,这不是新的,但得到了很大的改进。
自动格式设置
可以创建各种自动和预定义的格式,以简化将复杂样式更改应用于自定义 Web 服务器控件的页面开发人员的过程。 例如, TableDesigner 派生自 类的 ControlDesigner 控件提供了许多要从中选择的自动格式。 若要在自定义控件中实现并提供自动格式设置,请使用以下功能:
智能标记) (操作列表
操作列表是重要或广泛使用的任务的菜单,使用控件的页面开发人员可以在设计时用户界面 (UI) (如 Visual Studio 2005)中执行这些任务。 例如,控件的设计时视图可以提供可用任务的菜单。 这包括自动设置控件格式的任务。 若要了解操作列表,请从以下功能开始:
ActionLists 属性。
控件设计器区域
区域是 Web 服务器控件的设计时视图中的可编辑区域。 此功能在设计时提供模板内容、内部控件和属性的类似 WYSIWYG 编辑。 你可以让控件设计器在区域中创建控件,也可以使用工具箱将控件拖放到区域中。 区域使用以下功能进行管理:
OnClick 方法。
模板
用于创建用于设计时编辑模板化控件(例如控件) GridView 的 UI 的模型已大大改进。 可以创建包含控件各个部分模板的复杂自定义控件,并且自定义控件设计器可帮助页面开发人员修改模板具有以下功能:
TemplateGroups 属性。
InTemplateMode 属性。
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 |
获取或设置一个值,该值指示是否已创建 |
Visible |
获取指示该控件在设计时是否可见的值。 |
方法
显式接口实现
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) |