Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Sie können die Darstellung von Editor-Seitenrändern mithilfe von benutzerdefinierten Editorerweiterungen anpassen. In dieser Anleitung wird eine benutzerdefinierte Glyphe am Indikatorrand platziert, wenn das Wort "todo" in einem Code-Kommentar angezeigt wird.
Erstellen eines MEF-Projekts
Erstellen Sie ein C#VSIX-Projekt. (Wählen Sie im Dialogfeld "Neues Projekt " die Option "Visual C#/Erweiterbarkeit" und dann "VSIX Project" aus.) Benennen Sie die Lösung
TodoGlyphTest.Fügen Sie ein Editor-Klassifiziererprojektelement hinzu. Weitere Informationen finden Sie unter Erstellen einer Erweiterung mit einer Editorelementvorlage.
Löschen Sie die vorhandenen Klassendateien.
Definieren der Glyphe
Definieren Sie eine Glyphe, indem Sie die IGlyphFactory Schnittstelle ausführen.
So definieren Sie die Glyphe
Fügen Sie eine Klassendatei hinzu, und nennen Sie sie
TodoGlyphFactory.Fügen Sie den folgenden Code mithilfe von Deklarationen hinzu.
using System.ComponentModel.Composition; using System.Windows; using System.Windows.Shapes; using System.Windows.Media; using System.Windows.Controls; using Microsoft.VisualStudio.Text; using Microsoft.VisualStudio.Text.Editor; using Microsoft.VisualStudio.Text.Formatting; using Microsoft.VisualStudio.Text.Tagging; using Microsoft.VisualStudio.Utilities;Fügen Sie eine Klasse mit dem Namen
TodoGlyphFactoryhinzu, die IGlyphFactory implementiert.Fügen Sie ein privates Feld hinzu, das die Dimensionen der Glyphe definiert.
Implementieren Sie
GenerateGlyphdurch Definition des Glyphen-Benutzeroberflächenelements (UI).TodoTagwird weiter unten in dieser Schritt-für-Schritt-Anleitung definiert.public UIElement GenerateGlyph(IWpfTextViewLine line, IGlyphTag tag) { // Ensure we can draw a glyph for this marker. if (tag == null || !(tag is TodoTag)) { return null; } System.Windows.Shapes.Ellipse ellipse = new Ellipse(); ellipse.Fill = Brushes.LightBlue; ellipse.StrokeThickness = 2; ellipse.Stroke = Brushes.DarkBlue; ellipse.Height = m_glyphSize; ellipse.Width = m_glyphSize; return ellipse; }Fügen Sie eine Klasse mit dem Namen
TodoGlyphFactoryProviderhinzu, die IGlyphFactoryProvider implementiert wird. Exportieren Sie diese Klasse mit einer NameAttribute von "TodoGlyph", einer OrderAttribute von "After VsTextMarker", einem ContentTypeAttribute von "code" und einem TagTypeAttribute von "TodoTag".Implementieren Sie die GetGlyphFactory Methode durch Instanziieren der
TodoGlyphFactory.
Definieren eines Todo-Tags und Taggers
Definieren Sie die Beziehung zwischen dem UI-Element, das Sie in den vorherigen Schritten und dem Indikatorrand definiert haben. Erstellen Sie einen Tagtyp und einen Tagger, und exportieren Sie ihn mithilfe eines Tagger-Anbieters.
So definieren Sie ein Todo-Tag und einen Tagger
Fügen Sie dem Projekt eine neue Klassendatei hinzu, und nennen Sie sie
TodoTagger.Fügen Sie die folgenden Importe hinzu.
using System; using System.Collections.Generic; using System.ComponentModel.Composition; using Microsoft.VisualStudio.Text; using Microsoft.VisualStudio.Text.Tagging; using Microsoft.VisualStudio.Text.Editor; using Microsoft.VisualStudio.Text.Classification; using Microsoft.VisualStudio.Utilities;Fügen Sie eine Klasse mit dem Namen
TodoTaghinzu.Ändern Sie die Klasse
TodoTagger, dieTodoTagvom Typ ITagger<T> implementiert.Fügen Sie der
TodoTaggerKlasse private Felder für ein IClassifier und für den Text hinzu, der in den Klassifikationsspannen zu finden ist.Fügen Sie einen Konstruktor hinzu, der den Klassifizierer festlegt.
Implementieren Sie die GetTags Methode, indem Sie nach allen Klassifizierungen suchen, deren Namen das Wort "Comment" enthalten und dessen Text den Suchtext enthält. Wenn der Suchtext gefunden wird, geben Sie einen neuen TagSpan<T> vom Typ
TodoTagzurück.IEnumerable<ITagSpan<TodoTag>> ITagger<TodoTag>.GetTags(NormalizedSnapshotSpanCollection spans) { foreach (SnapshotSpan span in spans) { //look at each classification span \ foreach (ClassificationSpan classification in m_classifier.GetClassificationSpans(span)) { //if the classification is a comment if (classification.ClassificationType.Classification.ToLower().Contains("comment")) { //if the word "todo" is in the comment, //create a new TodoTag TagSpan int index = classification.Span.GetText().ToLower().IndexOf(m_searchText); if (index != -1) { yield return new TagSpan<TodoTag>(new SnapshotSpan(classification.Span.Start + index, m_searchText.Length), new TodoTag()); } } } } }Deklarieren eines Ereignisses
TagsChanged.Fügen Sie eine Klasse mit dem Namen
TodoTaggerProviderhinzu, die ITaggerProvider umsetzt, und exportieren Sie sie mit einem ContentTypeAttribute von "Code" und einem TagTypeAttribute von TodoTag.Importieren Sie die IClassifierAggregatorService.
Implementieren Sie die CreateTagger-Methode, indem Sie
TodoTaggerinstanziieren.
Erstellen und Testen des Codes
Um diesen Code zu testen, erstellen Sie die TodoGlyphTest-Lösung, und führen Sie sie in der experimentellen Instanz aus.
So erstellen und testen Sie die TodoGlyphTest-Lösung
Erstellen Sie die Lösung.
Führen Sie das Projekt aus, indem Sie F5 drücken. Eine zweite Instanz von Visual Studio wird gestartet.
Stellen Sie sicher, dass der Indikatorrand angezeigt wird.
Vergewissern Sie sich im Bereich Tools>Optionen, unter dem Abschnitt Alle Einstellungen>Texteditor>Allgemein>Anzeige, dass das Kontrollkästchen "Indikatorrand anzeigen" aktiviert ist.
Bestätigen Sie im Dialogfeld Extras>Optionen, im Abschnitt Text-Editor>Allgemein>Anzeige, dass das Kontrollkästchen Indikatorrand aktiviert ist.
Öffnen Sie eine Codedatei mit Kommentaren. Fügen Sie das Wort "Todo" zu einem der Kommentarabschnitte hinzu.
Ein hellblauer Kreis mit einem dunkelblauen Umriss wird links neben dem Codefenster im Indikatorrand angezeigt.