Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Pode personalizar a aparência das margens do editor usando extensões personalizadas do editor. Este walkthrough coloca um glifo personalizado na margem do indicador sempre que a palavra "todo" aparece num comentário de código.
Criar um projeto MEF
Cria um projeto C# VSIX. (No diálogo Novo Projeto , selecione Visual C# / Extensibilidade, depois Projeto VSIX.) Diz a solução
TodoGlyphTest.Adicionar um item de projeto Editor Classificador. Para obter mais informações, consulte Criar uma extensão com um modelo de item de editor.
Apague os ficheiros de classe existentes.
Defina o glifo
Defina um glifo ao executar a IGlyphFactory interface.
Para definir o glifo
Adicione um ficheiro de classe e nomeie-o
TodoGlyphFactory.Adicione o seguinte código 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 implemente IGlyphFactory.Adicione um campo privado que defina as dimensões do glifo.
Implemente
GenerateGlyphdefinindo o elemento de interface de utilizador (UI) do glifo.TodoTagé definido mais adiante neste walkthrough.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 implemente 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 instanciando o
TodoGlyphFactory.
Defina uma etiqueta Todo e um etiquetador
Defina a relação entre o elemento UI que definiu nos passos anteriores e a margem do indicador. Cria um tipo de etiqueta e um etiquetador e exporta-os usando um fornecedor de etiquetas.
Definir uma etiqueta de tarefa e um tagueador
Adicione um novo ficheiro 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;Adicione uma classe chamada
TodoTag.Modificar a classe nomeada
TodoTaggerque implementa ITagger<T> do tipoTodoTag.À classe
TodoTagger, adicione campos privados para um IClassifier e para o texto a encontrar nos intervalos de classificação.Adicione um construtor que defina 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 da pesquisa. Sempre que o texto da pesquisa for encontrado, retorna um novo TagSpan<T> de 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()); } } } } }Declarar um evento
TagsChanged.Adicione uma classe chamada
TodoTaggerProviderque implemente ITaggerProvider, e exporte-a com um ContentTypeAttribute de "code" e um TagTypeAttribute de TodoTag.Importe o IClassifierAggregatorService.
Implemente o CreateTagger método instanciando o
TodoTagger.
Construir e testar o código
Para testar este código, constrói a solução TodoGlyphTest e executa-a na instância experimental.
Para construir e testar a solução TodoGlyphTest
Crie a solução.
Executa o projeto pressionando F5. Começa uma segunda instância do Visual Studio.
Certifica-se de que a margem do indicador está visível.
No painel Opções>Ferramentas, na secção Todas as Definições>, Editor de Texto>, Geral>, Visualização, confirme que a caixa de seleção Mostrar margem do indicador está selecionada.
No diálogoFerramentas>Opções, na secçãoEditor de Texto>>, confirme que a caixa de seleção da margem do Indicador está selecionada.
Abre um ficheiro de código com comentários. Adicione a palavra "todo" a uma das secções de comentários.
Um círculo azul claro com um contorno azul-escuro aparece na margem do indicador à esquerda da janela de código.