0

我使用 MEF 开发了一个小型 Visual Studio 扩展。该扩展将文本格式、智能感知和工具提示添加到带有 DSL 的文本文件中。

有什么方法可以使用 MEF 在右上角添加一个组合框,该组合框将包含 DSL 的“第一级”构造,以便轻松导航到文件中定义它们的位置?我正在考虑一些与默认 Visual Studio C# 编辑器用于选择类(左上角)或类中的方法/属性/等(右上角)的非常相似的东西。

由于扩展已经具有格式化和智能感知,识别和标记我想包含在组合中的结构及其行号所需的代码已经完成。我只需要一些关于如何将组合添加到编辑器上边距并使其在选择更改时将光标移动到特定行的指针。

4

2 回答 2

1

您对类型和成员下拉栏感兴趣,它们(我上次检查过的)没有暴露给 MEF 扩展。您需要执行以下操作之一:

  1. 创建您自己的适配器IVsDropdownBar,您可以从 MEF 扩展中使用它。
  2. 完全避免使用标准功能,并实现IWpfTextViewMarginProvider在与原始功能相同的位置、样式和功能中创建边距的功能。

如果您使用第二种方法,请记住它与标准功能不同。如果您在 Visual Studio for C# 或其他标准语言中使用 Window → Split 命令,它将创建一个顶部和底部窗格,该窗格将共享一组类型和成员栏。IWpfTextViewMargin在同一场景中将复制自定义。

我的 Visual Studio 2010 的ANTLR 语言支持扩展中使用的下拉菜单使用第二种方法,结果证明这种方法远非微不足道,但至少我能够重用为我发布的其他语言扩展创建的组件。

于 2013-01-18T00:24:16.423 回答
0

只是为了补充@280Z28 所说的内容,我建议不要实施 anIVsDropdownBar并建议使用IWpfTextViewMarginProvider. 边距提供程序路由是编辑器直接提供的 MEF 扩展,允许您通过可以放在导出的边距提供程序上的编辑器TextViewRole和属性来控制边距的加载。ContentType

为了将插入符号移动到给定的函数位置,您可以使用多种方法,例如IWpfTextView.Caret. 确保EnsureVisible在移动插入符号后调用它,以保证文本视图将滚动到您将插入符号移动到的位置。

关于@280Z28 提到的拆分窗口案例,您始终可以使用 的方法IPropertyOwner并将属性添加到提供的属性包中,ITextBuffer.Properties以检查您已经为缓冲区提供边距的情况。通过向属性包添加标签,您可以检查拆分案例并在边距提供程序中返回 null 以模仿拆分窗口案例中的 C# 下拉栏行为。如果您决定使用 的属性包ITextBuffer,请务必注意投影场景。

于 2013-01-18T05:44:23.297 回答