在我的 DSL 项目中,我有一个带有许多装饰器的形状,这些装饰器链接到我的域类上的属性。但即使 ieach 装饰器具有 DisplayName 属性(设置为有意义的值),它也不会出现在生成的 DSL 项目中。(我没有忘记使用重新生成 t4 文件。)
我是否必须为每个仅将显示名称作为我希望显示的值的属性创建另一个装饰器,或者是否有其他一些我现在无法弄清楚的方法?
我假设装饰器的显示名称意味着您希望生成的 DSL 中的元素显示为“Example = a_value”,其中 a_value 是实际值,Example 是属性名称。
我过去所做的是创建第二个不可浏览的属性“ExampleDisplay”,它是装饰器实际指向的。然后我将 ExampleDisplay 的 Kind 属性设置为“Calculated”。然后,您需要提供工具包尝试调用的方法来显示您可以执行部分类的装饰器。
partial class ExampleElement
{
string GetExampleDisplayValue()
{
return "Example : " + this.Example;
}
}
这并不理想,因为您没有在 DSL 图上设置属性的好方法,您必须使用属性窗口。(属性窗口有时会出现滞后,除非您也挂钩基础属性的更新)。在 GUI 中进行实际 DSL 工具包所做的流畅编辑可能是可能的,但我还没有找到方法。
如果您还没有这样做,可能值得询问VSX 论坛。