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 提供基底控件設計工具類別,可繼承自和擴充,以提供設計主機中 Web 伺服器控件的設計時間支援,例如 Visual Studio 2005。
使用設計時間轉譯的物件模型會透過舊版改善,並具有下列新基類來提供簡化物件模型的存取權:
ControlDesigner,這不是新的,但已大幅改善。
自動格式化
您可以建立各種不同的自動和預先定義格式,以簡化將複雜樣式變更套用至自定義網頁伺服器控件的頁面開發人員程式。 例如, TableDesigner 衍生自 類別的 ControlDesigner 控件提供許多要從中選擇的自動格式。 若要在自訂控制項中實作並提供自動格式設定,請使用下列功能:
AutoFormats 屬性。
動作清單 (智慧標記)
動作清單是使用控件的頁面開發人員可以在設計時間使用者介面中執行的重要或廣泛使用工作的功能表, (UI) ,例如 Visual Studio 2005。 例如,控件的設計時間檢視可以提供可用工作的功能表。 這包括自動格式化控件的工作。 若要了解動作清單,請從下列功能開始:
ActionLists 屬性。
控件設計工具區域
區域是 Web 伺服器控制項之設計時間檢視中的可編輯區域。 這項功能在設計時間提供類似 WYSIWYG 的範本內容、內部控制項和屬性編輯。 您可以讓控件設計工具在區域中建立控制項,或使用 [工具箱] 將控件拖放到區域。 區域是使用下列功能來管理:
OnClick 方法
DesignerRegion 類別。
範本
建立用於設計時間編輯樣板化控件的UI模型,例如 GridView 控件,已大幅改善舊版。 您可以建立包含控制項各種部分範本的複雜自訂控制項,而自訂控件設計工具可協助使用下列功能修改範本的頁面開發人員:
TemplateGroups 屬性。
InTemplateMode 屬性。
TemplateGroup 類別。
Design-Time 轉譯
類別 ControlDesigner 具有下列方法來支援 Web 伺服器控制件的設計時間轉譯。 這些方法大多與舊版相同:
建構函式
ControlDesigner() |
初始化 ControlDesigner 類別的新執行個體。 |
屬性
ActionLists |
取得控制項設計工具的動作清單集合。 |
ActionLists |
取得與設計工具相關之元件所支援的設計階段動作清單。 (繼承來源 ComponentDesigner) |
AllowResize |
取得值,指出是否可在設計階段環境中調整控制項的大小。 |
AssociatedComponents |
取得元件集合,該集合與設計工具管理的元件相關聯。 (繼承來源 ComponentDesigner) |
AutoFormats |
針對設計階段的相關聯控制項,取得要在 [自動格式化] 對話方塊中顯示之預先定義的自動格式化配置集合。 |
Behavior |
已淘汰.
取得或設定與設計工具相關聯的 DHTML 行為。 (繼承來源 HtmlControlDesigner) |
Component |
取得這個設計工具正在設計的元件。 (繼承來源 ComponentDesigner) |
DataBindings |
取得目前控制項的資料繫結 (Data Binding) 集合。 (繼承來源 HtmlControlDesigner) |
DataBindingsEnabled |
取得值,指出關聯控制項的包含區域是否支援資料繫結。 |
DesignerState |
取得物件,用於在設計階段保存關聯控制項的資料。 |
DesignTimeElement |
已淘汰.
取得設計階段物件,表示與設計介面上 HtmlControlDesigner 物件相關聯的控制項。 (繼承來源 HtmlControlDesigner) |
DesignTimeElementView |
已淘汰.
取得控制項設計工具的檢視控制項物件。 |
DesignTimeHtmlRequiresLoadComplete |
已淘汰.
取得值,指出設計主應用程式在呼叫 GetDesignTimeHtml 方法之前是否必須完成載入。 |
Expressions |
在設計階段取得目前控制項的運算式繫結。 (繼承來源 HtmlControlDesigner) |
HidePropertiesInTemplateMode |
取得值,指示當控制項處於樣板模式時,關聯控制項的屬性是否會隱藏。 |
ID |
取得或設定控制項的 ID 字串。 |
InheritanceAttribute |
取得屬性 (Attribute),表示相關元件的繼承 (Inheritance) 型別。 (繼承來源 ComponentDesigner) |
Inherited |
取得值,表示是否要繼承這個元件。 (繼承來源 ComponentDesigner) |
InTemplateMode |
取得值,指出控制項在設計主應用程式中處於樣板檢視模式還是編輯模式。 InTemplateMode 屬性是唯讀的。 |
IsDirty |
已淘汰.
取得或設定值,指出 Web 伺服器控制項是否已標記為變更。 |
ParentComponent |
取得這個設計工具的父元件。 (繼承來源 ComponentDesigner) |
ReadOnly |
已淘汰.
取得或設定值,指出控制項屬性於設計階段是否為唯讀。 |
RootDesigner |
為包含關聯控制項的 Web Form 網頁,取得控制項設計工具。 |
SetTextualDefaultProperty |
提供基底控制項設計工具類別,以擴充 Web 伺服器控制項的設計模式行為。 (繼承來源 ComponentDesigner) |
ShadowProperties |
取得覆寫使用者設定的屬性值集合。 (繼承來源 ComponentDesigner) |
ShouldCodeSerialize |
已淘汰.
取得或設定值,指出是否應該於序列化 (Serialization) 期間,在程式碼後置 (Code-Behind) 檔案中為目前設計文件建立控制項的欄位宣告。 (繼承來源 HtmlControlDesigner) |
Tag |
取得物件,表示關聯控制項的 HTML 標記項目。 |
TemplateGroups |
取得範本群組集合,各範本群組包含一個或多個範本定義。 |
UsePreviewControl |
取得值,其中該值會表示控制項設計工具是否使用暫時預覽控制項以產生設計階段 HTML 標記。 |
Verbs |
取得與設計工具相關元件所支援的設計階段動詞命令 (Verb)。 (繼承來源 ComponentDesigner) |
ViewControl |
取得或設定 Web 伺服器控制項,可用於預覽設計階段的 HTML 標記。 |
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) |