Написание Visual Studio 2010 плагин, хотел бы показать набор инструментов, как Resharper в редакторе кода

Я хотел бы написать плагин для Visual Studio 2010, но на самом деле я сталкиваюсь с некоторыми проблемами. То, что я хочу сделать, кажется легким, мне бы хотелось, чтобы при редактировании текста в редакторе кода, как в Resharper (маленькая ручка с меню, которая помогает в рефакторинге) появляется небольшая панель инструментов, или вот здесь:

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

Я хотел бы знать:

  • Есть ли какой-нибудь шаблон Visual Studio, который помогает начать? Я пытаюсь с помощью "Редактор видового экрана", но я не уверен в этом.

  • Должен ли я начинать с панели инструментов или я могу показать некоторые кнопки из системной панели инструментов? В плагине axtools из ссылки есть пользовательская панель инструментов или система?

  • Как определить, что выбран текст?

У меня больше нет вопросов на данный момент. Я скорее веб-разработчик, поэтому для написания визуальной студии это новое для меня.

Спасибо заранее.

Ответ 1

Я могу ответить на две части этого вопроса:

  • Шаблон "Редактор текстового оформления", который поставляется с SDK, является хорошим местом для начала. После этого взгляните на этот визуальный менеджер, который я написал для небольшой демографической демо-версии: AgentBadgeVisualManager.cs. Это показывает вам, как размещать некоторый вид украшения рядом (хотя и не непосредственно под ним). Вы также захотите ознакомиться с файлом ViewCreationListener.cs, который имеет AdornmentLayerDefinition для визуального менеджера (наиболее важный вещь, которую нужно изменить, от значения по умолчанию, которое вы получаете с шаблоном проекта, является атрибутом Order, чтобы убедиться, что ваше украшение отображается поверх любого текста).
  • Я понятия не имею об этом, извините:( Вы захотите, чтобы это был какой-то WPF UIElement, но мимо того, что это действительно зависит от вас.
  • Из ITextView, который вы будете иметь в составе IWpfTextViewCreationListener, реализованного как часть образца (он передается в AgentBadgeVisualManager), вы можете подписаться на SelectionChanged следующее:

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

    Обратите внимание, что событие не будет запущено, когда выбор пуст, и следует за кареткой, поэтому, если вы хотите отслеживать это, вам также необходимо будет прослушать измененные события каретки. Однако, если вам просто интересно, когда а), когда выбор не пуст, или б) когда выбор меняется между пустым и непустым, этого события будет достаточно.

Для получения более общей информации о расширяемости вы можете проверить другие расширения, которые я написал на моей странице github, прочитать о том, как я написал в своем блоге, просмотрите страницу образцов VSX или страница образцов образцов на codeplex.