Condividi tramite


Estensione dell'editor di Visual Studio con un nuovo margine

I margini di visualizzazione testo vengono posizionati in un contenitore di margini (vedere ContainerMarginPlacement.KnownValues) e ordinati prima o dopo relativamente ad altri margini (vedere MarginPlacement.KnownValues).

I provider di margini di visualizzazione del testo implementano 'interfaccia ITextViewMarginProvider, configurare il margine fornito implementando TextViewMarginProviderConfiguration e, quando attivato, fornire il controllo dell'interfaccia utente da ospitare nel margine tramite CreateVisualElementAsync.

Poiché le estensioni in VisualStudio.Extensibility potrebbero essere al di fuori di Visual Studio, non è possibile usare direttamente WPF come livello di presentazione per il contenuto dei margini nella visualizzazione testo. Per fornire un contenuto al margine di una visualizzazione del testo, è necessario invece creare un RemoteUserControl e il modello di dati corrispondente per quel controllo. Anche se di seguito sono riportati alcuni semplici esempi, è consigliabile leggere la documentazione dell'interfaccia utente remota durante la creazione del contenuto dell'interfaccia utente del margine di visualizzazione testo.

/// <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);
}

Oltre a configurare il posizionamento dei margini, i provider di margini di visualizzazione testo possono anche configurare le dimensioni della cella della griglia in cui deve essere posizionato il margine usando GridCellLength e GridUnitType proprietà.

I margini della vista testo in genere visualizzano alcuni dati correlati alla vista stessa (ad esempio, il numero di riga corrente o il conteggio degli errori), quindi la maggior parte dei fornitori di margini di vista desidera anche ascoltare gli eventi della vista testo per reagire all'apertura, alla chiusura delle viste e alla digitazione dell'utente.

Visual Studio crea solo un'istanza del provider di margini di visualizzazione testo indipendentemente dal numero di visualizzazioni di testo applicabili che un utente apre, quindi se il margine visualizza alcuni dati con stato, il provider deve mantenere lo stato delle visualizzazioni di testo attualmente aperte.

Per altre informazioni, vedere Word Count Margin Sample.

I margini della visualizzazione testo verticale i cui contenuti devono essere allineati con le righe di visualizzazione testo non sono ancora supportati.