自定义和扩展域特定语言

Visual Studio 可视化和建模 SDK (VMSDK) 提供可定义建模工具的多个级别:

  1. 使用 DSL 定义关系图,定义域特定语言 (DSL)。您可以用图表表示法、一个可读取的 XML 形式和需要生成代码和其他项目的基本工具快速创建 DSL。

    有关更多信息,请参见 如何定义域特定语言

  2. 通过使用 DSL 定义的高级功能,优化 DSL。例如,可以进行其他链接显示用户创建一个元素。这些方法在 DSL 定义母版实现,因此,某些文档中添加几行代码。

  3. 使用程序代码,扩展建模工具。VMSDK 专门设计以便于集成与 DSL 定义生成的代码的扩展。有关更多信息,请参见 编写代码以自定义域特定语言

说明说明

当您更新的 DSL 定义文件时,不要忘记在重新生成解决方案之前单击在解决方案资源管理器工具栏中 转换所有模板

本节内容

获得。

请参见本主题

允许用户设置形状的颜色和样式属性。

右击形状或 connect 类,指向 将显示,并单击项目。

请参见 自定义图表的演示

模型元素不同的类类似在关系图上,共享属性 (如初始的高度和宽度,颜色,工具提示。

使用在形状或 connect 类之间的继承。在派生的形状和派生的域类之间的映射继承父的映射的详细信息。

或者,请映射不同的域类为同一形状类。

模型元素类由不同的形状上下文显示。

映射多个形状类为同一域类。当您生成解决方案时,请遵循错误报告并提供请求的代码决定使用什么形状。

建模颜色或其他功能 (如字体指示当前状态。

请参见 更新形状和连接线以反映模型

创建规则更新显示的属性。请参见 规则在模型内部传播更改

或者,使用 OnAssociatedPropertyChanged() 更新不公开的功能 (如链接箭头或字体。

在指示状态的形状更改图标。

设置映射在 DSL 详细信息 " 窗口的一个修饰器的可见性。定位若干个图像修饰器相同的位置。请参见 更新形状和连接线以反映模型

或者,重写 ImageField.GetDisplayImage()。请参见 ImageField 中的示例。

对所有形状的背景图像。

重写 InitializeInstanceResources() 添加锚定的 ImageField。请参见 自定义图表的演示

嵌套形状到任意深度

设置递归嵌入的树。定义 BoundsRules 包含形状。请参见 自定义图表的演示

附加连接在固定点在元素的边界。

定义嵌入最终元素,由关系图的小的端口。使用 BoundsRules 修复就地端口。请参见电路图示例 " Visualization and Modeling SDK

文本字段显示来自其他值派生的值。

映射文本修饰器对一个计算的或自定义存储字段的特性。有关更多信息,请参见 计算的和自定义的存储属性

将更改传播在模型元素之间,或者在形状之间切换

请参见 域特定语言中的验证

传播更改资源 (如在存储外的其他 Visual Studio 扩展。

请参见 事件处理程序在模型外部传播更改

" 属性 " 窗口中显示一个相关元素的属性。

设置特性转发。请参见 自定义“属性”窗口

特性类

" 属性 " 窗口分为调用类的一部分。设置字段的特性的 。与同一个类名称的属性将出现在同一个部分。还可以设置关系角色的

控件绑定到字段的特性的用户访问

设置错误的 可浏览的 防止字段的特性 " 属性 " 窗口中将显示在运行时。您仍可以将其映射 text 修饰器。

是只读的 UI 阻止用户更改字段的特性。

为字段的特性的程序访问不受影响。

更改节点的名称、图标和可见性在 DSL 模型资源管理器的。

请参见 自定义模型资源管理器

启用副本,则剪切和粘贴

设置 编辑 节点的 启用副本粘贴 属性在 DSL 资源管理器中。

复制引用链接及其目标,只要元素复制。例如,将注释附加到项目。

设置源角色的 传播复制 属性 (由行在域关系的一端在 DSL 定义关系图的)。

重写 ProcessOnCopy 编写代码达到更复杂的效果。

请参见 自定义复制行为

,当删除组件时,删除,定或重新链接相关元素。

设置关系角色的 传播删除 值。对于更复杂的效果,请重写 ShouldVisitRelationship ,并在 MyDslDeleteClosure 的 ShouldVisitRolePlayer 方法在 DomainModel.cs类别,定义

请参见自定义删除行为

保留形状布局和外观在复制并拖动放置。

添加形状并连接到复制的 ElementGroupPrototype。重写的最简便的方法是 ElementOperations.CreateElementGroupPrototype()

请参见 自定义复制行为

在所选位置粘贴形状,如当前光标位置。

重写用于 ElementOperations.Merge(). 的位置特定版本的 ClipboardCommandSet.ProcessOnCopy() 参见 自定义复制行为

创建在粘贴的其他链接

重写 ClipboardCommandSet.ProcessOnPasteCommand()

启用从此关系图、其他 DSL 或 UML 关系图和 windows 组件的拖放

请参见如何:添加拖放处理程序

允许形状或工具将拖动到子形状上,例如,端口,就象它拖动到父上。

定义在目标对象类的一个元素合并指令,转发到父的删除的对象。请参见 自定义元素创建和移动

允许形状或工具将拖动到形状上并将附加链接或对象创建的。例如,允许注释放置在将链接的项目中。

定义在目标域类的一个元素合并指令,并定义要生成的链接。在复杂种情况下,您可以将自定义代码。请参见 自定义元素创建和移动

用一个工具创建一组元素。例如,具有内置的元素将端口。

重写在 ToolboxHelper.cs 的工具箱初始化方法。创建包含元素及其关系链接的元素组原型 (EGP)。请参见 自定义工具和工具箱

,当 EGP 实例化时,将包括主体和端口形状。 EGP 或定义 BoundsRules 确定端口形状。请参见 BoundsRules 约束形状位置和大小

使用一个连接工具实例化关系的多种类型。

添加链接连接 (LCD)指令添加到由工具调用的连接生成器。LCD 确定关系的类型从两个元素的类型。若要使此依赖于元素的状态,您可以添加自定义代码。请参见 自定义工具和工具箱

便笺工具 –用户可以双击任何工具一个接一个地创建许多形状或连接。

在 DSL 资源管理器中,选择 Editor 节点。在 " 属性 " 窗口中,将 使用便笺工具箱项

定义菜单命令

请参见如何:使用域特定语言修改标准的菜单命令

约束与验证规则的设计

请参见域特定语言中的验证

生成代码,配置文件或从 DSL 文档。

从域特定语言生成代码

自定义设计如何将保存到文件中。

请参见自定义文件存储和 XML 序列化

保存模型时对数据库或其他媒体。

重写 TheLanguageDocData

请参见自定义文件存储和 XML 序列化

集成多个 DSL 为应用程序的一部分,,使其工作。

请参见 使用 Visual Studio Modelbus 集成模型

允许 DSL 是由第三方扩展,并控制该扩展。

使用 MEF 扩展 DSL

使用 DSL 库在 DSL 之间共享类

定义锁定策略以创建只读段

请参见

概念

如何定义域特定语言

可视化和建模 SDK - 域特定语言

其他资源

编写代码以自定义域特定语言