Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
U kunt het uiterlijk van editormarges aanpassen met behulp van aangepaste editorextensies. In deze handleiding wordt een aangepaste glyph op de indicatormarge geplaatst telkens wanneer het woord 'todo' in een code-opmerking voorkomt.
Een MEF-project maken
Maak een C# VSIX-project. (Selecteer in het dialoogvenster Nieuw projectVisual C# / Uitbreidbaarheid en vervolgens VSIX-project.) Geef de oplossing
TodoGlyphTesteen naam.Voeg een Editor Classifier-projectitem toe. Zie Een extensie maken met een sjabloon voor editoritems voor meer informatie.
Verwijder de bestaande klassebestanden.
Het symbool definiëren
Definieer een glyph door de interface uit te IGlyphFactory voeren.
Het symbool definiëren
Voeg een klassebestand toe en geef het een
TodoGlyphFactorynaam.Voeg de volgende code toe met behulp van declaraties.
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;Voeg een klasse toe met de naam
TodoGlyphFactorydie IGlyphFactory implementeert.Voeg een privéveld toe waarmee de afmetingen van de glyph worden gedefinieerd.
Implementeer
GenerateGlyphdoor het element glyph user interface (UI) te definiëren.TodoTagwordt later in deze handleiding gedefinieerd.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; }Voeg een klasse toe met de naam
TodoGlyphFactoryProviderdie IGlyphFactoryProvider implementeert. Exporteer deze klasse met een NameAttribute van 'TodoGlyph', een OrderAttribute van After VsTextMarker, een ContentTypeAttribute van 'code' en een TagTypeAttribute van TodoTag.Implementeer de GetGlyphFactory methode door de
TodoGlyphFactorymethode te instantiëren.
Een todo-tag en tagger definiëren
Definieer de relatie tussen het UI-element dat u in de vorige stappen en de indicatormarge hebt gedefinieerd. Maak een tagtype en tagger en exporteer het met behulp van een tagprovider.
Een todo-tag en tagger definiëren
Voeg een nieuw klassebestand toe aan het project en geef het een
TodoTaggernaam.Voeg de volgende importen toe.
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;Voeg een klasse toe met de naam
TodoTag.Wijzig de klasse genaamd
TodoTagger, die ITagger<T> van het typeTodoTagimplementeert.Voeg aan de
TodoTaggerklasse privévelden toe voor een IClassifier en voor de tekst die u in de classificatiebereiken kunt vinden.Voeg een constructor toe waarmee de classificatie wordt ingesteld.
Implementeer de GetTags methode door alle classificaties te zoeken waarvan de namen het woord 'opmerking' bevatten en waarvan de tekst de zoektekst bevat. Wanneer de zoektekst wordt gevonden, geeft u een nieuwe TagSpan<T> van type
TodoTagterug op.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()); } } } } }Declareer een
TagsChangedgebeurtenis.Voeg een klasse genaamd
TodoTaggerProvidertoe die ITaggerProvider implementeert en exporteer deze met een ContentTypeAttribute van 'code' en een TagTypeAttribute van TodoTag.Importeer de IClassifierAggregatorService.
Implementeer de CreateTagger methode door de
TodoTaggermethode te instantiëren.
De code bouwen en testen
Als u deze code wilt testen, bouwt u de todoGlyphTest-oplossing en voert u deze uit in het experimentele exemplaar.
De TodoGlyphTest-oplossing bouwen en testen
Bouw de oplossing.
Voer het project uit door op F5 te drukken. Er wordt een tweede exemplaar van Visual Studio gestart.
Zorg ervoor dat de indicatormarge wordt weergegeven.
Controleer in het deelvenster Extra>Opties, onder de sectie Alle instellingen>Teksteditor>Algemeen>Weergave, of het selectievakje Indicatormarge weergeven is aangevinkt.
Controleer in het dialoogvensterExtra-opties> onder de sectieAlgemeen>weergeven van > of het selectievakje Indicatormarge is ingeschakeld.
Open een codebestand met opmerkingen. Voeg het woord 'todo' toe aan een van de opmerkingensecties.
Er wordt een lichtblauwe cirkel met een donkerblauw kader weergegeven in de indicatormarge links van het codevenster.