Tutorial: Personalizar la vista de textoWalkthrough: Customize the text view

Puede personalizar una vista de texto mediante la modificación de cualquiera de las siguientes propiedades en su mapa de formato del editor:You can customize a text view by modifying any of the following properties in its editor-format map:

  • Margen del indicadorIndicator margin

  • Símbolo de intercalación de inserciónInsertion caret

  • Sobrescribir el símbolo de intercalaciónOverwrite caret

  • Texto seleccionadoSelected text

  • Texto seleccionado inactivo (es decir, texto seleccionado que se ha perdido el foco)Inactive selected text (that is, selected text that's lost focus)

  • Espacio en blanco visibleVisible whitespace

Requisitos previosPrerequisites

A partir de Visual Studio 2015, no instale el SDK de Visual Studio desde el centro de descarga.Starting in Visual Studio 2015, you do not install the Visual Studio SDK from the download center. Ha incluido como una característica opcional en el programa de instalación de Visual Studio.It's included as an optional feature in Visual Studio setup. También puede instalar el SDK de VS más adelante.You can also install the VS SDK later on. Para obtener más información, consulte instalar el SDK de Visual Studio.For more information, see Install the Visual Studio SDK.

Crear un proyecto MEFCreate a MEF project

  1. Cree un proyecto de VSIX de C#.Create a C# VSIX project. (En el nuevo proyecto cuadro de diálogo, seleccione Visual C# / extensibilidad, a continuación, proyecto VSIX.) Asigne a la solución el nombre ViewPropertyTest.(In the New Project dialog, select Visual C# / Extensibility, then VSIX Project.) Name the solution ViewPropertyTest.

  2. Agregar una plantilla de elemento de clasificador de Editor para el proyecto.Add an Editor Classifier item template to the project. Para obtener más información, consulte crear una extensión con una plantilla de elementos de editor.For more information, see Create an extension with an editor item template.

  3. Elimine los archivos de clase existentes.Delete the existing class files.

Definir el tipo de contenidoDefine the content type

  1. Agregue un archivo de clase y asígnele el nombre ViewPropertyModifier.Add a class file and name it ViewPropertyModifier.

  2. Agregue las siguientes using directivas:Add the following using directives:

    using System;
    using System.Collections;
    using System.Windows;
    using System.Windows.Media;
    using System.ComponentModel.Composition;
    using Microsoft.VisualStudio.Text.Classification;
    using Microsoft.VisualStudio.Text.Editor;
    using Microsoft.VisualStudio.Utilities;
    
    Imports System
    Imports System.Collections
    Imports System.Windows
    Imports System.Windows.Media
    Imports System.ComponentModel.Composition
    Imports Microsoft.VisualStudio.Text.Classification
    Imports Microsoft.VisualStudio.Text.Editor
    Imports Microsoft.VisualStudio.Utilities
    
  3. Declare una clase llamada TestViewCreationListener que hereda de IWpfTextViewCreationListener.Declare a class named TestViewCreationListener that inherits from IWpfTextViewCreationListener. Exportar a esta clase con los siguientes atributos:Export this class with the following attributes:

    • ContentTypeAttribute para especificar el tipo de contenido al que se aplica este agente de escucha.ContentTypeAttribute to specify the type of content to which this listener applies.

    • TextViewRoleAttribute para especificar el rol de este agente de escucha.TextViewRoleAttribute to specify the role of this listener.

      [Export(typeof(IWpfTextViewCreationListener))]
      [ContentType("text")]
      [TextViewRole(PredefinedTextViewRoles.Document)]
      internal class TestViewCreationListener : IWpfTextViewCreationListener
      
      <Export(GetType(IWpfTextViewCreationListener)), ContentType("text"), TextViewRole(PredefinedTextViewRoles.Document)>
      Friend Class TestViewCreationListener
          Implements IWpfTextViewCreationListener
      
  4. En esta clase, importe el IEditorFormatMapService.In this class, import the IEditorFormatMapService.

    [Import]
    internal IEditorFormatMapService FormatMapService = null;
    
    <Import()>
    Friend FormatMapService As IEditorFormatMapService = Nothing
    

Cambiar las propiedades de vistaChange the view properties

  1. Configurar la TextViewCreated método para que se cambian las propiedades de la vista cuando se abre la vista.Set up the TextViewCreated method so that the view properties are changed when the view is opened. Para realizar el cambio, primero busque el ResourceDictionary que se corresponde con el aspecto de la vista que desea buscar.To make the change, first find the ResourceDictionary that corresponds to the aspect of the view you want to find. A continuación, cambie la propiedad adecuada en el diccionario de recursos y establecer las propiedades.Then, change the appropriate property in the resource dictionary and set the properties. Procesar por lotes las llamadas a la SetProperties método mediante una llamada a la BeginBatchUpdate método antes de establecer las propiedades y, a continuación, el EndBatchUpdate después de establecer las propiedades.Batch the calls to the SetProperties method by calling the BeginBatchUpdate method before you set the properties and then the EndBatchUpdate after you set the properties.

    public void TextViewCreated(IWpfTextView textView)
    {
        IEditorFormatMap formatMap = FormatMapService.GetEditorFormatMap(textView);
    
        ResourceDictionary regularCaretProperties = formatMap.GetProperties("Caret");
        ResourceDictionary overwriteCaretProperties = formatMap.GetProperties("Overwrite Caret");
        ResourceDictionary indicatorMargin = formatMap.GetProperties("Indicator Margin");
        ResourceDictionary visibleWhitespace = formatMap.GetProperties("Visible Whitespace");
        ResourceDictionary selectedText = formatMap.GetProperties("Selected Text");
        ResourceDictionary inactiveSelectedText = formatMap.GetProperties("Inactive Selected Text");
    
        formatMap.BeginBatchUpdate();
    
        regularCaretProperties[EditorFormatDefinition.ForegroundBrushId] = Brushes.Magenta;
        formatMap.SetProperties("Caret", regularCaretProperties);
    
        overwriteCaretProperties[EditorFormatDefinition.ForegroundBrushId] = Brushes.Turquoise;
        formatMap.SetProperties("Overwrite Caret", overwriteCaretProperties);
    
        indicatorMargin[EditorFormatDefinition.BackgroundColorId] = Colors.LightGreen;
        formatMap.SetProperties("Indicator Margin", indicatorMargin);
    
        visibleWhitespace[EditorFormatDefinition.ForegroundColorId] = Colors.Red;
        formatMap.SetProperties("Visible Whitespace", visibleWhitespace);
    
        selectedText[EditorFormatDefinition.BackgroundBrushId] = Brushes.LightPink;
        formatMap.SetProperties("Selected Text", selectedText);
    
        inactiveSelectedText[EditorFormatDefinition.BackgroundBrushId] = Brushes.DeepPink;
        formatMap.SetProperties("Inactive Selected Text", inactiveSelectedText);
    
        formatMap.EndBatchUpdate();
    }
    
    Public Sub TextViewCreated(ByVal textView As IWpfTextView) Implements IWpfTextViewCreationListener.TextViewCreated
    
        Dim formatMap As IEditorFormatMap = FormatMapService.GetEditorFormatMap(textView)
    
        Dim regularCaretProperties As ResourceDictionary = formatMap.GetProperties("Caret")
        Dim overwriteCaretProperties As ResourceDictionary = formatMap.GetProperties("Overwrite Caret")
        Dim indicatorMargin As ResourceDictionary = formatMap.GetProperties("Indicator Margin")
        Dim visibleWhitespace As ResourceDictionary = formatMap.GetProperties("Visible Whitespace")
        Dim selectedText As ResourceDictionary = formatMap.GetProperties("Selected Text")
        Dim inactiveSelectedText As ResourceDictionary = formatMap.GetProperties("Inactive Selected Text")
    
        formatMap.BeginBatchUpdate()
    
        regularCaretProperties(EditorFormatDefinition.ForegroundBrushId) = Brushes.Magenta
        formatMap.SetProperties("Caret", regularCaretProperties)
    
        overwriteCaretProperties(EditorFormatDefinition.ForegroundBrushId) = Brushes.Turquoise
        formatMap.SetProperties("Overwrite Caret", overwriteCaretProperties)
    
        indicatorMargin(EditorFormatDefinition.BackgroundColorId) = Colors.LightGreen
        formatMap.SetProperties("Indicator Margin", indicatorMargin)
    
        visibleWhitespace(EditorFormatDefinition.ForegroundColorId) = Colors.Red
        formatMap.SetProperties("Visible Whitespace", visibleWhitespace)
    
        selectedText(EditorFormatDefinition.BackgroundBrushId) = Brushes.LightPink
        formatMap.SetProperties("Selected Text", selectedText)
    
        inactiveSelectedText(EditorFormatDefinition.BackgroundBrushId) = Brushes.DeepPink
        formatMap.SetProperties("Inactive Selected Text", inactiveSelectedText)
    
        formatMap.EndBatchUpdate()
    End Sub
    

Compilar y probar el códigoBuild and test the code

  1. Compile la solución.Build the solution.

    Al ejecutar este proyecto en el depurador, se inicia una segunda instancia de Visual Studio.When you run this project in the debugger, a second instance of Visual Studio is started.

  2. Cree un archivo de texto y escriba algún texto.Create a text file and type some text.

    • El punto de inserción debe ser magenta y el símbolo de intercalación de sobrescritura deben turquesa.The insertion caret should be magenta and the overwrite caret should be turquoise.

    • El margen del indicador (a la izquierda de la vista de texto) debe ser la luz verde.The indicator margin (to the left of the text view) should be light green.

  3. Seleccione el texto que escribió.Select the text you typed. El color del texto seleccionado debe ser ligero rosa.The color of the selected text should be light pink.

  4. Mientras que el texto seleccionado, haga clic en cualquier lugar fuera de la ventana de texto.While the text is selected, click anywhere outside the text window. El color del texto seleccionado debe ser rosa oscuro.The color of the selected text should be dark pink.

  5. Activar el espacio en blanco visible.Turn on visible whitespace. (En el editar menú, elija avanzadas y, a continuación, haga clic en ver espacios en blanco).(On the Edit menu, point to Advanced and then click View White Space). Escriba algunas de las pestañas en el texto.Type some tabs in the text. Se deben mostrar las flechas rojas que representan las fichas.Red arrows that represent the tabs should be displayed.

Vea tambiénSee also

Puntos de extensión de editor y el servicio de lenguajeLanguage service and editor extension points