Tutorial: Personalización de la vista de texto

Puede personalizar una vista de texto modificando cualquiera de las siguientes propiedades en su mapa de formato editor:

  • Margen del indicador

  • Inserción de símbolo de intercalación

  • Sobrescribir símbolo de intercalación

  • Texto seleccionado

  • Texto seleccionado inactivo (es decir, texto seleccionado que perdió el foco)

  • Espacios en blanco visibles

Creación de un proyecto MEF

  1. Cree un proyecto VSIX de C#. (En Cuadro de diálogo Nuevo proyecto , seleccione Visual C# / Extensibilidad y, después , Proyecto VSIX). Asigne un nombre a la solución ViewPropertyTest.

  2. Agregue una plantilla de elemento clasificador del editor al proyecto. Para obtener más información, vea Creación de una extensión con una plantilla de elemento de editor.

  3. Elimine los archivos de clase existentes.

Definición del tipo de contenido

  1. Agregue un archivo de clase y asígnele el nombre ViewPropertyModifier.

  2. Agregue las siguientes directivas using:

    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;
    
  3. Declare una clase denominada TestViewCreationListener que hereda de IWpfTextViewCreationListener. Exporte esta clase con los atributos siguientes:

    • ContentTypeAttribute para especificar el tipo de contenido al que se aplica este agente de escucha.

    • TextViewRoleAttribute para especificar el rol de este agente de escucha.

      [Export(typeof(IWpfTextViewCreationListener))]
      [ContentType("text")]
      [TextViewRole(PredefinedTextViewRoles.Document)]
      internal class TestViewCreationListener : IWpfTextViewCreationListener
      

  4. En esta clase, importe .IEditorFormatMapService

    [Import]
    internal IEditorFormatMapService FormatMapService = null;
    

Cambiar las propiedades de la vista

  1. Configure el TextViewCreated método para que las propiedades de la vista se cambien cuando se abra la vista. Para realizar el cambio, busque primero el ResourceDictionary que corresponde al aspecto de la vista que desea encontrar. A continuación, cambie la propiedad adecuada en el diccionario de recursos y establezca las propiedades. Realice por lotes las llamadas al SetProperties método llamando al BeginBatchUpdate método antes de establecer las propiedades y, después, después de EndBatchUpdate establecer las propiedades.

    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();
    }
    

Compilación y prueba del código

  1. Compile la solución.

    Al ejecutar este proyecto en el depurador, se inicia una segunda instancia de Visual Studio.

  2. Cree un archivo de texto y escriba algún texto.

    • El símbolo de inserción debe ser magenta y el símbolo de intercalación de sobrescritura debe ser turquesa.

    • El margen del indicador (a la izquierda de la vista de texto) debe ser verde claro.

  3. Seleccione el texto que escribió. El color del texto seleccionado debe ser rosa claro.

  4. Mientras se selecciona el texto, haga clic en cualquier lugar fuera de la ventana de texto. El color del texto seleccionado debe ser rosa oscuro.

  5. Active el espacio en blanco visible. (En el Menú Editar, seleccione Avanzadas y, a continuación, haga clic en Ver espacio en blanco). Escriba algunas pestañas en el texto. Se deben mostrar las flechas rojas que representan las pestañas.