c# - 编写 Visual Studio 2010 插件,想在代码编辑器中显示一个像 Resharper 这样的工具箱

标签 c# wpf plugins mef visual-studio-2010

我想为 Visual Studio 2010 编写一个插件,但实际上我遇到了一些问题。我想做的事情看起来很简单,我希望在代码编辑器中选择文本时出现一个小工具箱,例如在 Resharper(带有有助于重构的菜单的小笔)或像这里一样:

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

我想知道:

  1. 是否有有助于入门的 Visual Studio 模板?我尝试使用“编辑器视口(viewport)装饰”,但我不确定。

  2. 我应该从工具箱开始设计还是可以显示系统工具箱中的一些按钮?在链接中的 axtools 插件中,它是定制工具箱还是系统工具箱?

  3. 如何检测文本是否被选中?

目前我没有其他问题了。我是一名 Web 开发人员,因此编写 Visual Studio 插件对我来说是一件新鲜事。

提前致谢。

最佳答案

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

  1. SDK 附带的“编辑器文本装饰”模板是一个很好的起点。一旦你有了它,看看我为一个小的假多用户打字演示写的这个可视化管理器:AgentBadgeVisualManager.cs .这向您展示了如何在文本附近(尽管不是直接在文本下方)放置某种类型的装饰。您还需要查看 ViewCreationListener.cs文件,其中包含用于可视化管理器的 AdornmentLayerDefinition(最重要的更改是项目模板的默认设置,即 Order 属性,以确保您的装饰显示在任何文本之上)。
  2. 我不知道这个,抱歉 :( 您可能希望它是某种 WPF UIElement,但除此之外这真的取决于您。
  3. 来自 ITextView,您将作为示例的一部分实现的 IWpfTextViewCreationListener 的一部分(它被传递给 AgentBadgeVisualManager),您可以订阅 SelectionChanged像这样的事件:

    view.Selection.SelectionChanged += (sender, args) =>/* 在此处调用方法来更新装饰 */;

    Note that the event won't be fired when the selection is empty and follows the caret around, so if you want to track that, you'll also need to listen to caret changed events.但是,如果您只关心 a) 选择何时非空,或 b) 选择在空和非空之间变化,那么该事件就足够了。

有关可扩展性的更多一般信息,您可以查看我在 github page 上编写的其他扩展。 ,了解我是如何写的 on my blog , 查看 VSX samples page ,或 editor samples page on codeplex .

关于c# - 编写 Visual Studio 2010 插件,想在代码编辑器中显示一个像 Resharper 这样的工具箱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2213103/

相关文章:

c# - 获取 COUNT 时 Linq Select 语句变慢

c# - 从集合中访问 MVVM 父 View 模型

c# - WPF Applicationdeployment.isnetworkdeployed 总是返回 false

c# - 使用文本框更改 Canvas 颜色

C#更新数据库

c# - 绑定(bind)进度条可见性 mvvm 不起作用

django - 如何安装/使用 django-inlinecss

python - 为什么要在python中使用工厂方法?

eclipse - 手动安装grails

c# - win10 wpf窗口定位bug