Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Você pode personalizar a aparência das margens do editor usando extensões personalizadas do editor. Este passo a passo coloca um glifo personalizado na margem do indicador sempre que a palavra "todo" aparece em um comentário de código.
Criar um projeto do MEF
Crie um projeto VSIX em C#. (Na caixa de diálogo Novo Projeto , selecione Visual C#/Extensibilidade e, em seguida, Projeto VSIX.) Nomeie a solução
TodoGlyphTest.Adicionar um item de projeto do Classificador de Editor. Para obter mais informações, consulte Criar uma extensão com um modelo de item do editor.
Exclua os arquivos de classe existentes.
Definir o glifo
Defina um glifo executando a IGlyphFactory interface.
Para definir o glifo
Adicione um arquivo de classe e nomeie-o
TodoGlyphFactory.Adicione o código a seguir usando declarações.
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;Adicione uma classe chamada
TodoGlyphFactoryque implementa IGlyphFactory.Adicione um campo privado que define as dimensões do glifo.
Implemente
GenerateGlyphdefinindo o elemento de interface do usuário do glifo.TodoTagé definido posteriormente neste passo a passo.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; }Adicione uma classe chamada
TodoGlyphFactoryProviderque implementa IGlyphFactoryProvider. Exporte esta classe com um NameAttribute de "TodoGlyph", um OrderAttribute de After VsTextMarker, um ContentTypeAttribute de "code" e um TagTypeAttribute de TodoTag.Implemente o GetGlyphFactory método criando uma instância do
TodoGlyphFactory.
Definir uma tag Todo e um marcador
Defina a relação entre o elemento de interface do usuário que você definiu nas etapas anteriores e a margem do indicador. Crie um tipo de marca e um marcador e exporte-o usando um provedor de marcação.
Para definir uma etiqueta de tarefas e uma ferramenta de marcação
Adicione um novo arquivo de classe ao projeto e nomeie-o
TodoTagger.Adicione as seguintes importações.
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;Adicionar uma classe chamada
TodoTag.Modifique a classe nomeada
TodoTaggerque implementa ITagger<T> do tipoTodoTag.Para a classe
TodoTagger, adicione campos privados para IClassifier e para o texto a ser localizado nos intervalos de classificação.Adicione um construtor que define o classificador.
Implemente o GetTags método encontrando todos os intervalos de classificação cujos nomes incluem a palavra "comentário" e cujo texto inclui o texto de pesquisa. Sempre que o texto da pesquisa for encontrado, retorne um novo TagSpan<T> tipo
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()); } } } } }Declare um evento
TagsChanged.Adicione uma classe nomeada
TodoTaggerProviderque implementa ITaggerProvider, e exporte-a com um ContentTypeAttribute "código" e um TagTypeAttribute TodoTag.Importe o IClassifierAggregatorService.
Implemente o método CreateTagger instanciando o
TodoTagger.
Compilar e testar o código
Para testar esse código, crie a solução TodoGlyphTest e execute-a na instância experimental.
Para criar e testar a solução TodoGlyphTest
Crie a solução.
Execute o projeto pressionando F5. Uma segunda instância do Visual Studio é iniciada.
Verifique se a margem do indicador está sendo exibida.
No painel Ferramentas >Opções, na seção Texto > Editor >Geral >Exibição de Todas as Configurações, confirme se a caixa de seleção Mostrar margem de indicador está selecionada.
Na caixa de diálogo Ferramentas>Opções, na seção Editor de Texto>Geral>Exibição, confirme se a caixa de seleção margem de indicador está marcada.
Abra um arquivo de código que tenha comentários. Adicione a palavra "todo" em uma das seções de comentários.
Um círculo azul claro com um contorno azul escuro aparece na margem indicadora à esquerda da janela de código.