行為服務概觀
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) 事件。 它也可以停用所有功能表命令,讓鍵盤快速鍵或其他命令無法在拖曳時發生作用。
放開滑鼠按鍵時,Behavior 會完成動作手勢,並自行從行為堆疊上移除。 這項動作會自動還原先前的 Behavior。
注意事項 |
---|
BehaviorService 架構是繫結至 Windows Form 模型,因此並不支援其他顯示技術,如 Web Form。 |