При написании плагина Visual Studio 2010, хотелось бы показать панель инструментов, подобную Resharper, в редакторе кода - PullRequest
10 голосов
/ 06 февраля 2010

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

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

Хотелось бы знать:

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

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

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

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

Заранее спасибо.

1 Ответ

4 голосов
/ 07 февраля 2010

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

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

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

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

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

...