Návod: Vytvoření glyfů okrajů
Vzhled okrajů editoru můžete přizpůsobit pomocí vlastních rozšíření editoru. Tento názorný postup umístí vlastní glyf na okraj ukazatele pokaždé, když se slovo "todo" zobrazí v komentáři kódu.
Vytvoření projektu MEF
Vytvořte projekt VSIX jazyka C#. (V Dialogové okno Nový projekt , vyberte Visual C# / Rozšiřitelnost a pak projekt VSIX.) Pojmenujte řešení
TodoGlyphTest
.Přidejte položku projektu klasifikátoru editoru. Další informace najdete v tématu Vytvoření rozšíření pomocí šablony položky editoru.
Odstraňte existující soubory třídy.
Definování glyfu
Definujte glyf spuštěním IGlyphFactory rozhraní.
Definování glyfů
Přidejte soubor třídy a pojmenujte ho
TodoGlyphFactory
.Přidejte následující kód pomocí deklarací.
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;
Přidejte třídu s názvem
TodoGlyphFactory
, která implementuje IGlyphFactory.Přidejte soukromé pole, které definuje dimenze glyfu.
Implementujte
GenerateGlyph
definováním elementu uživatelského rozhraní (UI) glyph.TodoTag
je definován dále v tomto názorném postupu.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; }
Přidejte třídu s názvem
TodoGlyphFactoryProvider
, která implementuje IGlyphFactoryProvider. Exportovat tuto třídu s " NameAttribute TodoGlyph", an OrderAttribute after VsTextMarker, a " ContentTypeAttribute code" a a todoTag TagTypeAttribute .Implementujte metodu GetGlyphFactory vytvořením instance
TodoGlyphFactory
.
Definování značky todo a taggeru
Definujte vztah mezi prvkem uživatelského rozhraní, který jste definovali v předchozích krocích, a okrajem ukazatele. Vytvořte typ značky a tagger a exportujte ho pomocí zprostředkovatele taggeru.
Definování značky úkolů a taggeru
Přidejte do projektu nový soubor třídy a pojmenujte ho
TodoTagger
.Přidejte následující importy.
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;
Přidejte třídu s názvem
TodoTag
.Upravte třídu s názvem
TodoTagger
, která implementuje ITagger<T> typTodoTag
.TodoTagger
Do třídy přidejte soukromá pole pro textIClassifier, který se má najít v rozsahu klasifikace.Přidejte konstruktor, který nastaví klasifikátor.
Implementujte metodu GetTags vyhledáním všech klasifikací, jejichž názvy obsahují slovo "komentář" a jehož text obsahuje hledaný text. Kdykoli se najde hledaný text, vraťte nový TagSpan<T> typ
TodoTag
.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()); } } } } }
Deklarujte
TagsChanged
událost.Přidejte třídu s názvem
TodoTaggerProvider
, která implementuje ITaggerProvidera exportuje ji s kódem ContentTypeAttribute a značkou TagTypeAttribute TodoTag.Naimportujte soubor IClassifierAggregatorService.
Implementujte metodu CreateTagger vytvořením instance
TodoTagger
.
Sestavení a otestování kódu
Pokud chcete tento kód otestovat, sestavte řešení TodoGlyphTest a spusťte ho v experimentální instanci.
Sestavení a testování řešení TodoGlyphTest
Sestavte řešení.
Spusťte projekt stisknutím klávesy F5. Spustí se druhá instance sady Visual Studio.
Ujistěte se, že se zobrazuje okraj ukazatele. (Na kartě Nabídka Nástroje , klepněte na příkaz Možnosti. Na stránce Textový editor se ujistěte, že je vybraný okraj ukazatele.)
Otevřete soubor kódu, který obsahuje komentáře. Přidejte slovo "todo" do některého z oddílů komentáře.
Světle modrý kruh s tmavě modrou osnovou se zobrazí na okraji ukazatele vlevo od okna kódu.