Поделиться через


Расширение редактора Visual Studio с новым полем

Поля представления текста помещаются в контейнер полей (см. ContainerMarginPlacement.KnownValues) и упорядочиваются до или после других полей (см. MarginPlacement.KnownValues).

Поставщики полей текстовых представлений реализуют интерфейс ITextViewMarginProvider, поле, которое они предоставляют, настраивается путем реализации TextViewMarginProviderConfiguration, и при активации предоставляется элемент управления пользовательского интерфейса для размещения в поле через CreateVisualElementAsync.

Так как расширения в VisualStudio.Extensibility могут быть устаревшими из Visual Studio, мы не можем напрямую использовать WPF в качестве слоя презентации для содержимого полей представления текста. Вместо этого для предоставления содержимого в область представления текста требуется создать RemoteUserControl и соответствующий шаблон данных для этого элемента управления. Хотя ниже приведены некоторые простые примеры, мы рекомендуем ознакомиться с документацией по удаленному пользовательскому интерфейсу при создании содержимого пользовательского интерфейса поля представления текста.

/// <summary>
/// Configures the margin to be placed to the left of built-in Visual Studio line number margin.
/// </summary>
public TextViewMarginProviderConfiguration TextViewMarginProviderConfiguration => new(marginContainer: ContainerMarginPlacement.KnownValues.BottomRightCorner)
{
    Before = new[] { MarginPlacement.KnownValues.RowMargin },
};

/// <summary>
/// Creates a remotable visual element representing the content of the margin.
/// </summary>
public async Task<IRemoteUserControl> CreateVisualElementAsync(ITextViewSnapshot textView, CancellationToken cancellationToken)
{
    var documentSnapshot = await textView.GetTextDocumentAsync(cancellationToken);
    var dataModel = new WordCountData();
    dataModel.WordCount = CountWords(documentSnapshot);
    this.dataModels[textView.Uri] = dataModel;
    return new MyMarginContent(dataModel);
}

Помимо настройки размещения полей, поставщики полей текстового представления также могут настроить размер ячейки сетки, в которой следует разместить поле с помощью свойств GridCellLength и GridUnitType.

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

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

Дополнительные сведения см. в примере поля подсчета слов.

Поля для вертикального представления текста, содержимое которых должно быть выровнено по строкам представления текста, пока не поддерживаются.