共用方式為


自訂和擴充網域特定語言

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

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

  2. 使用 DSL 定義的更進階功能來微調 DSL。 例如,您可以在使用者建立元素時顯示其他連結。 這些技術大多在DSL定義中實現,有些需要幾行程式代碼。

  3. 使用程式代碼來擴充您的建模工具。 VMSDK 專為讓您輕鬆地將延伸模組與從 DSL 定義產生的程式碼整合而來。 如需詳細資訊,請參閱 撰寫程式碼以自訂 Domain-Specific 語言

備註

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

文章參考

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

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

建立更新暴露屬性值的規則。 請參閱 規則在模型內傳播變更

或者,使用 OnAssociatedPropertyChanged() 來更新未公開的功能,例如連結箭頭或字型。
形狀上的圖示會變更以指示狀態。 在 DSL 詳細資料視窗中設定 decorator 映射的可見度。 在相同位置尋找數個影像修飾器。 請參閱 更新造型和連接器以反映模型

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

是 UI 唯讀,可 防止使用者變更網域屬性。

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

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

請參閱 自訂複製行為
刪除元素時,可以刪除相關元素,重新指定父系或重新連結。 設定關係角色的「傳播刪除」值。 對於更複雜的效果,請覆寫ShouldVisitRelationshipShouldVisitRolePlayer方法,這些方法在MyDslDeleteClosure類別中定義,並在DomainModel.cs中定義。
在複製和拖放時保留形狀佈局和外觀。 將圖形和連接器新增至複製的 ElementGroupPrototype。 最方便的覆寫方法是 ElementOperations.CreateElementGroupPrototype()

請參閱 自訂複製行為
將形狀貼到所選位置,例如目前游標位置。 覆寫ClipboardCommandSet.ProcessOnCopy()以使用ElementOperations.Merge().的地點特定版本,請參閱自訂影本行為
在貼上時建立額外連結 覆寫 ClipboardCommandSet.ProcessOnPasteCommand()
啟用從此圖表、其他 DSL 以及 Windows 元素的拖放功能 請參閱 如何:新增拖放處理常式
允許將圖案或工具拖曳到子圖案上,例如埠,就像拖曳到父圖案一樣。 在目標物件類別上定義「元素合併指引」,以將捨棄的物件轉遞至父項。 請參閱 自訂元素建立和移動
允許將形狀或工具拖曳到形狀上,並建立其他連結或物件。 例如,允許將註解拖放到要連結的項目上。 在目標網域類別上定義元素合併指令,並定義要產生的連結。 在複雜的情況下,您可以新增自訂程式碼。 請參閱 自訂元素建立和移動
使用一個工具創建一組元素。 例如,具有一組固定連接埠的元件。 在ToolboxHelper.cs中覆寫工具箱的初始化方法。 建立包含元素及其關係鏈結的「元素群組原型 (EGP)」。 請參閱 自訂工具和工具箱

在 EGP 中併入主體及埠配置,或定義 BoundsRules 以在實例化 EGP 時定位埠配置。
使用一個連線工具來實例化數種類型的關係。 將「連結連線指引 (LCD)」新增至工具所叫用的「連線產生器」。 LCD 會根據兩個元素的類型來決定關係的類型。 若要讓這取決於元素的狀態,您可以新增自訂程式碼。 請參閱 自訂工具和工具箱
黏性工具 - 使用者可以雙擊任何工具,以連續建立許多形狀或連接器。 在 DSL 總管中,選取節點 Editor 。 在「屬性」視窗中,設定 「使用黏性工具箱項目」。
定義功能表指令 請參閱 如何:修改標準功能表命令
使用驗證規則限制模型 請參閱 領域專屬語言中的驗證
從 DSL 產生程式碼、設定檔或文件。 從 Domain-Specific 語言產生程式碼
自訂模型儲存至檔案的方式。 請參閱 自訂檔案儲存體和 XML 序列化
將模型儲存至資料庫或其他媒體。 覆寫 YourLanguageDocData

請參閱 自訂檔案儲存體和 XML 序列化
整合多個 DSL,以便它們作為一個應用程式的一部分運作。 請參閱 使用 Visual Studio Modelbus 整合模型
允許第三方擴展您的 DSL,並控制擴展。 使用 MEF 擴充 DSL

利用 DSL 程式庫在 DSL 之間共用類別

定義鎖定原則以建立 Read-Only 區段

備註

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