自訂及擴充特定領域語言

Visual Studio 模型化和視覺效果 SDK (VMSDK) 提供數個層級,您可以在其中定義模型化工具:

  1. 使用 DSL 定義圖來定義特定領域語言 (DSL)。 您可以使用圖表標記法、可讀取的 XML 表單,以及產生程式碼和其他成品所需的基本工具,來快速建立 DSL。 如需詳細資訊,請參閱如何定義特定領域語言

  2. 使用 DSL 定義的更多進階功能來微調 DSL。 例如,您可以在使用者建立元素時讓其他連結出現。 這些技巧大部分是在 DSL 定義中實現的,而某些技巧則需要幾行程式碼。

  3. 使用程式碼擴充您的模型化工具。 VMSDK 是為了能讓您輕鬆整合擴充功能與從 DSL 定義產生的程式碼而專門設計的。 如需詳細資訊,請參閱撰寫程式碼以自訂特定領域語言

注意

當您已更新 DSL 定義檔案時,請不要忘了在重建解決方案之前,按一下 [方案總管] 工具列中的 [轉換所有範本]

文章參考

若要實現此效果 請參閱此主題
允許使用者設定圖形的色彩和樣式屬性。 以滑鼠右鍵按一下圖形或連接器類別、指向 [新增公開],然後按一下項目。
模型元素的不同類別在圖表上看起來類似,共用初始高度和寬度、色彩、工具提示等屬性。 在圖形或連接器類別之間使用繼承。 衍生圖形與衍生領域類別之間的對應會繼承父代的對應詳細資料。

或者,將不同的領域類別對應至相同的圖形類別。
模型元素的類別是由不同的圖形內容顯示。 將多個圖形類別對應至相同的領域類別。 當您建置解決方案時,請遵循錯誤報告並提供要求的程式碼,以確定要使用的圖形。
圖形色彩或其他功能 (例如字型) 指出目前狀態。 請參閱更新圖形和連接器來反映模型

建立更新公開屬性的規則。 請參閱規則傳播模型內的變更

或者,使用 OnAssociatedPropertyChanged() 來更新非公開功能,例如連結箭號或字型。
圖形上的圖示會變更以指出狀態。 在 [DSL 詳細資料] 視窗中設定裝飾項目對應的可見度。 找出相同位置上的數個影像裝飾項目。 請參閱更新圖形和連接器來反映模型

或者,覆寫 ImageField.GetDisplayImage()。 請參閱 ImageField 中的範例。
設定圖形上的背景影像 覆寫 InitializeInstanceResources() 以新增錨定 ImageField。
將圖形巢狀化至任何深度 設定遞迴內嵌樹狀結構。 定義 BoundsRules 以包含圖形。
將連接器附加在元素界限上的固定點。 定義圖表上以小型連接埠表示的內嵌終端元素。 使用 BoundsRules 將連接埠固定到位。 請參閱視覺效果和模型化 SDK 中的電路圖範例。
文字欄位會顯示衍生自其他值的值。 將文字裝飾項目對應至導出或自訂儲存體領域屬性。 如需詳細資訊,請參閱計算及自訂的儲存區屬性
在模型元素之間或圖形之間傳播變更 請參閱特定領域語言中的驗證
將變更傳播至存放區外部的資源,例如其他 Visual Studio 延伸模組。 請參閱事件處理常式傳播模型外的變更
屬性視窗會顯示相關元素的屬性。 設定屬性轉送。 請參閱自訂屬性視窗
屬性類別 屬性視窗會分成稱為類別的區段。 設定領域屬性的類別。 具有相同類別名稱的屬性會出現在相同的區段中。 您也可以設定關聯性角色的類別
控制使用者對領域屬性的存取 設定 Is Browsable false 以防止領域屬性在執行階段出現在 [屬性] 視窗中。 您仍然可以將其對應至文字裝飾項目。

Is UI Read Only 可防止使用者變更領域屬性。

程式對領域屬性的存取不會受到影響。
變更 DSL 模型總管中節點的名稱、圖示和可見度。 請參閱自訂模型總管
啟用複製、剪下和貼上 在 DSL 總管中,設定 [編輯器] 節點的 Enable Copy Paste 屬性。
每當複製元素,即會複製參考連結及其目標。 例如,複製附加至項目的註解。 設定來源角色的 Propagates Copy 屬性 (以 DSL 定義圖中領域關聯性一側的線條表示)。

撰寫程式碼來覆寫 ProcessOnCopy 以實現更複雜的效果。

請參閱自訂複製行為
刪除元素時,會刪除、重新連結相關元素,或重設其父代。 設定關聯性角色的 Propagates Delete 值。 如需更複雜的效果,請覆寫 MyDslDeleteClosure 類別 (定義於 DomainModel.cs) 中的 ShouldVisitRelationshipShouldVisitRolePlayer 方法。
在複製和拖放時保留圖形配置和外觀。 將圖形和連接器新增至複製的 ElementGroupPrototype。 最方便的覆寫方法是 ElementOperations.CreateElementGroupPrototype()

請參閱自訂複製行為
在選擇的位置貼上圖形,例如目前的游標位置。 覆寫 ClipboardCommandSet.ProcessOnCopy() 以使用特定位置版本的 ElementOperations.Merge().。請參閱自訂複製行為
在貼上時建立其他連結 覆寫 ClipboardCommandSet.ProcessOnPasteCommand()
從這個圖表、其他 DSL 和 Windows 元素啟用拖放功能 請參閱作法:新增拖放處理常式
允許將圖形或工具拖曳至子圖形,例如連接埠,就像將其拖曳至父圖形一樣。 在目標物件類別上定義項目合併指示詞,以將放下的物件轉送至父代。 請參閱自訂項目的建立和移動
允許將圖形或工具拖曳至圖形,並建立其他連結或物件。 例如,允許將註解置放至其要連結的項目。 在目標領域類別上定義項目合併指示詞,並定義要產生的連結。 在複雜案例中,您可以新增自訂程式碼。 請參閱自訂項目的建立和移動
使用一個工具建立元素群組。 例如,具有固定連接埠集的元件。 覆寫 ToolboxHelper.cs 中的工具箱初始化方法。 建立元素群組原型 (EGP),其中包含元素及其關聯性連結。 請參閱自訂工具和工具箱

在 EGP 中包含主體和連接埠圖形,或定義 BoundsRules 以在 EGP 具現化時定位連接埠圖形。
使用一個連線工具來具現化數種類型的關聯性。 將連結連線指示詞 (LCD) 新增至工具所叫用的連線建立器。 LCD 會從兩個元素的類型判斷關聯性的類型。 若要使其取決於元素的狀態,您可以新增自訂程式碼。 請參閱自訂工具和工具箱
黏性工具 - 使用者可以按兩下任何工具,以連續建立多個圖形或連接器。 在 DSL 總管中,選取 Editor 節點。 在 [屬性] 視窗中,設定 [使用黏性工具箱項目]
定義功能表命令 請參閱作法:修改標準功能表命令
使用驗證規則限制模型 請參閱特定領域語言中的驗證
從 DSL 產生程式碼、組態檔或文件。 從特定領域語言產生程式碼
自訂模型儲存至檔案的方式。 請參閱自訂檔案儲存體和 XML 序列化
將模型儲存至資料庫或其他媒體。 覆寫 YourLanguageDocData

請參閱自訂檔案儲存體和 XML 序列化
整合數個 DSL,使其可當作應用程式一部分運作。 請參閱使用 Visual Studio Modelbus 整合模型
允許您的 DSL 可由協力廠商擴充,並控制延伸模組。 使用 MEF 擴充您的 DSL

使用 DSL 程式庫共用 DSL 之間的類別

定義鎖定原則來建立唯讀區段

注意

文字範本轉換元件會作為 Visual Studio 延伸模組開發工作負載的一部分自動安裝。 您也可以從 Visual Studio 安裝程式的 [個別元件] 索引標籤加以安裝,其位於 [SDK、程式庫和架構] 底下。 從 [個別元件] 索引標籤安裝 [模型化 SDK] 元件。