Ответ 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.