Erweiterung des Visual Studio-Editors um einen neuen Randbereich
Textansichtsränder werden in einem Randcontainer platziert (siehe ContainerMarginPlacement.KnownValues) und relativ zu anderen Rändern davor oder danach sortiert (siehe MarginPlacement.KnownValues).
Textansichts-Randanbieter implementieren die ITextViewMarginProvider Schnittstelle, konfigurieren den von ihnen bereitgestellten Rand, indem sie TextViewMarginProviderConfiguration implementieren und bei Aktivierung ein UI-Steuerelement bereitstellen, das über CreateVisualElementAsyncim Rand gehostet wird.
Da Erweiterungen in VisualStudio.Extensibility möglicherweise nicht von Visual Studio verarbeitet werden, können wir WPF nicht direkt als Präsentationsebene für Inhalte von Textansichtsrändern verwenden. Stattdessen erfordert die Inhaltsbereitstellung an einem Textansichtsrand das Erstellen einer RemoteUserControl und der entsprechenden Datenvorlage für dieses Steuerelement. Im Folgenden finden Sie einige einfache Beispiele. Wenn Sie jedoch Inhalte für die Textansicht am Rand der Benutzeroberfläche erstellen, sollten Sie die Dokumentation zur Remotebenutzeroberfläche lesen.
/// <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);
}
Neben der Konfiguration der Seitenrandplatzierung können Anbieter von Textansichtsranden auch die Größe der Rasterzelle konfigurieren, in der der Rand mit GridCellLength- und GridUnitType- Eigenschaften platziert werden soll.
Textansichtsränder visualisieren in der Regel einige Daten, die mit der Textansicht zusammenhängen (z. B. die aktuelle Zeilennummer oder die Anzahl der Fehler), sodass die meisten Anbieter von Textansichtsrändern auch auf Textansichtsereignisse lauschen sollten, um auf das Öffnen und Schließen von Textansichten und Benutzereingaben zu reagieren.
Visual Studio erstellt nur eine Instanz Ihres Textansichtsrandanbieters, unabhängig davon, wie viele anwendbare Textansichten ein Benutzer öffnet. Wenn ihr Rand also einige zustandsbehaftete Daten anzeigt, muss Ihr Anbieter den Status der aktuell geöffneten Textansichten beibehalten.
Weitere Informationen finden Sie im Beispiel zu WordCountMargin.
Vertikale Textansichtsränder, deren Inhalt an Textansichtszeilen ausgerichtet werden muss, werden noch nicht unterstützt.