行為服務概觀
BehaviorService 管理設計工具中的使用者介面。它提供一致的方式,管理使用者介面項目,例如與滑鼠相關的事件、功能表命令,以及設計階段的 OLE 拖放作業。
在設計階段管理使用者介面
撰寫自訂設計階段經驗中很重要的一方面就是管理使用者介面。您是透過撰寫自訂設計工具,為自訂控制項提供設計階段經驗。
身為設計工具開發人員,您可以自行建立使用者介面層,稱為 "adorner"。您在每一層介面之內自行建立 Glyph 型別,以供進行繪製、拖曳和其他 UI 作業。每一個 Glyph 都可以有相關聯的 Behavior 型別。Behavior 是有全部使用者輸入之多載的類別,包括功能表命令、滑鼠動作,以及 OLE 拖放作業。Behavior 物件也可以獨立於 Glyph 物件之外加入,讓這些物件都能夠連結整個設計工具的一般使用者輸入。前文所提及的全部三項功能都是以 Behavior 型別進行實作。
注意事項 |
---|
您必須加入對設計階段組件 (System.Design.dll) 的參考。這個組件未包含在 .NET Framework 4 Client Profile 中。若要加入對 System.Design.dll 的參考,您必須將專案的目標 Framework 變更為 [.NET Framework 4]。 |
在 .NET Framework 1.1 版中,有些事件 (例如 OnMouseDragBegin) 是由 ControlDesigner 類別加以公開。在這個模型中,大部分的 UI 設計工具邏輯是在 EventHandler 中實作。由於控制項上有數個指定的區域可供使用者管理操作,這個模型需要您撰寫相當多的支援邏輯。
Behavior 型別可以處理這種情況。BehaviorService 由兩個部分組成。下表列出這兩個組成部分及其說明。
組件 |
描述 |
---|---|
Behavior 類別的堆疊 |
每一個類別都有與功能表命令、OLE 拖曳作業、滑鼠事件等等相關聯的方法。堆疊最上層的類別是使用中 Behavior,而且所有使用者輸入都傳送至該 Behavior。 |
Adorner 是介於設計介面與使用者之間的不可見層。Adorner 可以包含 Glyph 物件,這些物件是輕量呈現的物件。Glyph 可以由行為服務進行點擊測試,也可以選擇公開 Behavior 物件,只要 Glyph 從其點擊測試報告為 true,此物件就會成為使用中 Behavior。 |
雖然 [Windows Form 設計工具] 仍支援拖曳和滑鼠移動的原始 ControlDesigner 覆寫,這些動作會實作為 Behavior 物件。下表列出簡單控制項之設計工具中,有標準拖曳控點集的項目。
行為項目 |
描述 |
---|---|
選取範圍裝飾項 |
單一的裝飾層會處理所有選取範圍 UI Glyph 物件。 |
主體圖像 |
完全透明的主體 Glyph 置於控制項之上。它的行為會處理所有滑鼠互動。 |
抓取圖像 |
擴充設計階段使用者介面
BehaviorService 模型可以讓新功能輕易就能在現有設計工具使用者介面上分層。新 UI 維持獨立而與先前定義的 Glyph 和 Behavior 物件無關。例如,某些控制項上的智慧標籤是由位於控制項 () 右上角的 Glyph 進行存取。
智慧標籤程式碼會自行建立 Adorner 層,並加入 Glyph 物件至此層。這樣會讓智慧標籤 Glyph 物件與選取範圍 Glyph 物件保持分離。加入新 Adorner 至 Adorners 集合的必要程式碼簡單明瞭。
behaviorService = (BehaviorService)serviceProvider.GetService(typeof(BehaviorService));
designerActionAdorner = new Adorner();
behaviorService.Adorners.Add(designerActionAdorner);
Glyph dag = new DesignerActionGlyph(/*...*/);
designerActionAdorner.Glyphs.Add(dag);
圖像和行為
Glyph 型別相當簡單。如果您需要複雜的功能,請將它加入至自行從 Glyph 衍生的類別。
Glyph 物件可以有 Behavior 物件,但這些並非必要的物件。沒有 Behavior 物件的 Glyph 具有會傳回 null 的 Behavior 屬性。
Behavior 對每個支援的使用者互動都有一個方法。例如,基底 Behavior 類別有方法,可支援拖放作業,如 OnDragEnter 和 OnGiveFeedback。
大部分方法都會傳回 Boolean 值,指出是否已處理事件。拖曳事件在 DragEventArgs 參數中有值。各個功能表項目都可以透過由 FindCommand 方法傳回,加入或移除。FindCommand 方法會結合 DisableAllCommands 屬性運作,指定 MenuCommand 物件如何與行為互動。
裝飾項
Adorner 可以視為使用介面相關項目之間的 Proxy,其中包含 Glyph 物件和 BehaviorService。
每一個 Adorner 都可以啟用及停用。只有已啟用的 Adorner 物件才會從 BehaviorService 接到點擊測試和繪製訊息。
當 Adorner 加入至 BehaviorService 的 BehaviorServiceAdornerCollection 時,集合會設定 BehaviorService 屬性,以便讓 Adorner 叵呼至 BehaviorService。
呼叫 Adorner 物件的 Invalidate 方法會強制其相關聯的 BehaviorService,重新整理 Adorner 視窗
推入行為
加入 Behavior 物件至行為堆疊最簡單的方法就是使用 Glyph 物件,但這並不是唯一的方法。Glyph 物件本身能夠將 Behavior 物件推入至行為堆疊,您也可以直接將 Behavior 物件推入行為堆疊上。請考慮以下情況:您要將抓取控點在設計介面上四處拖曳。您不需要撰寫邏輯追蹤使用者的拖曳動作,Glyph 本身就會依行為堆疊的順序執行下列動作。
按下滑鼠按鍵時,Glyph 會堆入新的 Behavior 到行為堆疊上。這個 Behavior 會處理滑鼠移動 (mouse-move) 和放開滑鼠 (mouse-up) 事件。它也可以停用所有功能表命令,讓鍵盤快速鍵或其他命令無法在拖曳時發生作用。
注意事項 |
---|
BehaviorService 架構是繫結至 Windows Form 模型,因此並不支援其他顯示技術,如 Web Form。 |