Windows Form 的設計工具命令和 DesignerAction 物件模型

設計工具命令和 DesignerAction 物件模型能夠讓您以通用的方式,在設計階段為元件指定一組動作。 然後使用者再從設計介面存取這些動作,一般都是透過在元件的智慧標籤圖像 (Glyph) (智慧標籤圖像) 上按一下,並從智慧標籤面板選取所提供的其中一個動作。 因此,這種模型能夠統一設計工具提供命令給使用者的多種方式。

智慧標籤

智慧標籤功能可以讓元件和控制項即時線上資訊和命令,供使用者查看使用。 智慧標籤可說是取代了設計工具動詞命令,因為您可以選擇在智慧標籤面板中顯示智慧標籤項目,也可以選擇在與元件或控制項相關聯的捷徑功能表中顯示智慧標籤項目。

如需如何實作智慧標籤的完整範例,請參閱 HOW TO:將智慧標籤附加至 Windows Form 元件

設計工具命令類別

下表說明當您開發元件和控制項時,設計工具命令展示讓您取用的方式。

類別

說明

MenuCommand

委派,附加至命令 ID, 它不會定義命令文字、其位置或其他中繼資料。

DesignerVerb

功能表命令,同時也定義其文字和其他中繼資料。 動詞命令一般是依照各個設計工具分別提供,專屬該設計工具使用。 設計工具一般是顯示在捷徑功能表上,或顯示在主功能表列的 [檢視] 功能表上。

DesignerActionItem

功能表列,定義文字及其他中繼資料,以描述可以執行的目標動作。 動作一般都會帶領使用者逐步完成多步驟程序,例如,設定元件的資料來源。

推入與提取模型

下表說明透過程式設計存取設計工具命令的兩種模型。

模型

說明

推入

設計工具明確地要求服務,並加入命令至該服務。

提取

由服務查詢設計工具,取得它所提供的命令。

統一現有的命令

上面設計工具命令類別的表格中所列出的各種不同命令其實有很多共通之處。 DesignerAction API 統籌處理這些命令,以一致的模式呈現,公開命令供設計工具使用者取用。

注意事項注意事項

並非所有的設計工具都支援所有模型。 設計工具可以查詢所提供的支援,回應時可能會變更提供命令的方式。 此外,提取與推入模型也可能不是支援所有命令。 並非所有設計工具都會將設計工具動作公開為智慧標籤。 例如,有些設計工具可能會在工具視窗中公開設計工具動作。

DesignerAction 物件模型

下表說明實作 DesignerAction 物件模型的重要類別。

類別

說明

DesignerActionItem

代表智慧標籤面板上的面板項目。

DesignerActionList

定義用來建立智慧標籤面板的項目清單。

DesignerActionService

建立管理元件之 DesignerActionItem 物件集合的設計階段服務。

DesignerActionTextItem

代表面板上的靜態文字項目。 從 DesignerActionItem 衍生。

DesignerActionPropertyItem

代表與從 DesignerActionList 衍生之類別中屬性相關聯的面板項目。 從 DesignerActionItem 衍生。

DesignerActionMethodItem

代表與從 DesignerActionList 衍生之類別中方法相關聯的面板項目。 從 DesignerActionItem 衍生。

DesignerActionHeaderItem

代表智慧標籤面板上的靜態標題項目。 從 DesignerActionTextItem 衍生。

使用 DesignerAction 物件模型

若要為元件或控制項啟用設計工具動作,請從 DesignerActionList 基底類別衍生。 使用這個衍生的類別,填入智慧標籤面板,此面板代表類似功能表的 UI。

您的衍生類別可以覆寫 virtual GetSortedActionItems 方法,以傳回衍生自 DesignerActionItem 的物件集合。 這些物件代表面板項目。 每個項目都依其類型顯示在面板中。 例如,DesignerActionTextItem 顯示為靜態文字標籤。 使用中面板項目,以 DesignerActionPropertyItemDesignerActionMethodItem 類型表示,分別有相對應可公開存取的屬性或方法,可為該項目實作功能。

建立了衍生的類別以後,就可以透過兩種方式加入至控制項:

  • 使用推入模型,加入衍生類別的執行個體至 ComponentDesigner 類別上的 ActionLists 屬性。 這可以提供繼承類別的方式,以提供其他動作清單,並供合併其項目之用。

  • 使用提取模型,呼叫 Add,加入衍生類別的執行個體至由全域 DesignerActionService 維護的集合。 這些動作清單將與由 ComponentDesigner 所維護集合中的動作清單合併。

DesignerActionPropertyItem 在設計工具中是以其對應的 UITypeEditor 表示。 DesignerActionMethodItem 在設計工具中是以現用 UI 項目表示,例如,叫用程式設計人員所提供方法的超連結 (Hyperlink)。 您的動作清單之 GetSortedActionItems 方法的實作會依應該顯示在智慧標籤面板中的順序傳回屬性和方法。

如需實作智慧標籤的完整範例,請參閱主題 HOW TO:將智慧標籤附加至 Windows Form 元件

動作清單中現有的動詞命令

具備現有 DesignerVerb 實作的控制項和元件會自動受到 DesignerActionList 支援。 設計環境會為動作清單查詢元件的設計工具,如果沒有任何設計工具可用,會為現有的動詞命令建立。

捷徑功能表中的動作清單項目

如果要讓項目同時顯示在捷徑功能表和動作清單上,可以在 DesignerActionMethodItem 上指定 IncludeAsDesignerVerb 旗標。

呼叫 Add 時,會為任何已設定 IncludeAsDesignerVerb 旗標的 DesignerActionMethodItem 掃描動作清單。 若已設定旗標,則會為該項目呼叫 AddVerb 方法,將該項目加入至元件的動詞命令,然後也會加入至其捷徑功能表中。

設計工具命令類型的變更

.NET Framework 1.1 版的 MenuCommandDesignerVerb 類別已經做了大幅變更,以支援 DesignerAction 物件模型。 現在這兩種類別都公開新的 Properties 屬性,它是可儲存命令物件之所有公開屬性的 IDictionary。 字典索引鍵是公用屬性的名稱。 它可以啟用屬性的泛型列舉,並提供一致的基礎,新的屬性可以由此基礎加入而毋需修改類別定義。

此外,MenuCommandService 類別也提供 IMenuCommandService 的標準實作,並執行正確的動詞命令整合。 這個類別會引發事件,告知加入或移除命令。 有了這個類別,您可以根據這些事件的結果,建立 UI。 MenuCommandService 以及 IMenuCommandService 在服務容器中都提供使用。

請參閱

工作

HOW TO:將智慧標籤附加至 Windows Form 元件

參考

DesignerActionList

ComponentDesigner

DesignerVerb

MenuCommand

MenuCommandService

其他資源

擴充設計階段支援