自訂及擴充特定領域語言
Visual Studio 模型化和視覺效果 SDK (VMSDK) 提供數個層級,您可以在其中定義模型化工具:
使用 DSL 定義圖來定義特定領域語言 (DSL)。 您可以使用圖表標記法、可讀取的 XML 表單,以及產生程式碼和其他成品所需的基本工具,來快速建立 DSL。 如需詳細資訊,請參閱如何定義特定領域語言。
使用 DSL 定義的更多進階功能來微調 DSL。 例如,您可以在使用者建立元素時讓其他連結出現。 這些技巧大部分是在 DSL 定義中實現的,而某些技巧則需要幾行程式碼。
使用程式碼擴充您的模型化工具。 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) 中的 ShouldVisitRelationship 和 ShouldVisitRolePlayer 方法。 |
在複製和拖放時保留圖形配置和外觀。 | 將圖形和連接器新增至複製的 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] 元件。