代码之家  ›  专栏  ›  技术社区  ›  Tomasz Jaskuλa

编写Visual Studio 2010插件时,希望在代码编辑器中显示类似Resharper的工具箱

  •  10
  • Tomasz Jaskuλa  · 技术社区  · 15 年前

    我想为Visual Studio 2010编写一个插件,但实际上我面临一些问题。我想做的似乎很简单,我希望在代码编辑器中选择文本时出现一个小工具箱,如在Resharper中(小笔,带有帮助重构的菜单)或如下所示:

    http://www.axtools.com/products-vs2010-extensions.php?tab=selection-popup

    我想知道:

    1. 有没有一个有助于启动的Visual Studio模板?我尝试使用“编辑器视区装饰”,但我不确定。

    2. 我应该停止启动工具箱还是从系统工具箱中显示一些按钮?在链接的axtools插件中,它是定制的工具箱还是系统工具箱?

    3. 如何检测选中的文本?

    我暂时没有问题了。我是个网页开发人员,所以写一个Visual Studio插件对我来说是一件新鲜事。

    事先谢谢。

    1 回复  |  直到 15 年前
        1
  •  4
  •   Noah Richards    15 年前

    我可以回答这个问题的两个部分:

    1. SDK附带的“编辑器文本修饰”模板是一个很好的开始。一旦你有了这个,看看我为一个小假多用户输入demo写的这个可视化管理器: AgentBadgeVisualManager.cs .这将向您展示如何在文本附近(虽然不是直接在文本下方)放置某种装饰。你还想看看 ViewCreationListener.cs 文件,其中包含 AdornmentLayerDefinition 对于可视化管理器(要更改的最重要的事情,从项目模板的默认值开始,是 Order 属性,以确保显示装饰 在…之上 任何文本)。
    2. 我不知道这个,对不起:(你想把这个做成某种水渍险) UIElement 但过去,这真的取决于你。
    3. 从一个 ITextView ,作为 IWpfTextViewCreationListener 作为示例的一部分实现(它被传递到 AgentBadgeVisualManager )您可以订阅 SelectionChanged 类似事件:

      view.Selection.SelectionChanged += (sender, args) => /* call methods to update your adornment here */;

      请注意,当所选内容为空且位于插入符号之后时,不会激发事件,因此如果要跟踪它,还需要侦听插入符号更改的事件。但是,如果您只关心a)当选择非空时,或者b)当选择在空和非空之间更改时,该事件就足够了。

    有关可扩展性的更多一般信息,您可以查看我在我的 github page ,了解我是怎么写的 on my blog ,查看 VSX samples page ,或者 editor samples page on codeplex .