tutorial: personalizar la vista de texto
Puede personalizar una vista de texto en que se modifica siguiendo las cualquiera de las propiedades del formato del editor asignado:
Margen del indicador
Símbolo de intercalación de inserción
Símbolo de intercalación sobrescribirá
texto seleccionado
Texto seleccionado inactivo (es decir, texto seleccionado que ha perdido el foco)
espacio en blanco visible
Requisitos previos
Para completar este tutorial, debe instalar Visual Studio 2010 SDK. Para obtener más información sobre Visual Studio SDK y descargarlo, vea Centro para desarrolladores de extensibilidad de Visual Studio en el sitio web de MSDN.
Crear un proyecto administrado del marco (MEF) de extensibilidad
Para crear un proyecto de MEF
Cree un proyecto del clasificador del editor de C# o el proyecto del Editor de Visual Basic Clasificador. Llame a la solución ViewPropertyTest.
Abra el archivo source.extension.vsixmanifest del editor de Manifiesto VSIX.
Asegúrese de que la dirección de Content contiene un tipo de contenido componente MEF y que la ruta de acceso está establecida en ViewPropertyTest.dll.
Guarde y cierre source.extension.vsixmanifest.
elimine los archivos existentes de la clase.
Definición de tipo de contenido
para definir un tipo de contenido
Agregue un archivo de clase y denomínelo ViewPropertyModifier.
Agregue las siguientes directivas de using (instrucciones deImports en Visual Basic).
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
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;
declare una clase denominada TestViewCreationListener que herede de IWpfTextViewCreationListener. Exportar esta clase con los atributos siguientes:
ContentTypeAttribute para especificar el tipo de contenido que este agente de escucha se aplica.
TextViewRoleAttribute para especificar el rol de este agente de escucha.
<Export(GetType(IWpfTextViewCreationListener)), ContentType("text"), TextViewRole(PredefinedTextViewRoles.Document)> Friend Class TestViewCreationListener Implements IWpfTextViewCreationListener
[Export(typeof(IWpfTextViewCreationListener))] [ContentType("text")] [TextViewRole(PredefinedTextViewRoles.Document)] internal class TestViewCreationListener : IWpfTextViewCreationListener
en esta clase, importe IEditorFormatMapService.
<Import()> Friend FormatMapService As IEditorFormatMapService = Nothing
[Import] internal IEditorFormatMapService FormatMapService = null;
cambiar las propiedades view
para cambiar las propiedades view
Implemente el método de TextViewCreated para cambiar las propiedades ver cuando se abre la vista. Para realizar el cambio, localice primero ResourceDictionary que corresponden a la apariencia de la vista que desea buscar. Y cambia la propiedad adecuada en el diccionario de recursos y establezca las propiedades. Procesar por lotes las llamadas al método de SetProperties llamando al método de BeginBatchUpdate antes de establecer las propiedades y después EndBatchUpdate después de establecer las propiedades.
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
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(); }
Compilar y probar el código
para compilar y probar el código
Compile la solución.
Al ejecutar este proyecto en el depurador, una segunda instancia de Visual Studio se crea instancias.
Cree un archivo de texto y escriba texto.
El símbolo de intercalación de inserción debe ser magenta y el símbolo de intercalación sobrescribirá debe ser turquesa.
El margen del indicador (a la izquierda de la vista de texto) debe ser verde claro.
Seleccione el texto que acaba de escribir. Color del texto seleccionado debe ser rosa claro.
Aunque el texto está seleccionado, haga clic en cualquier punto fuera de la ventana de texto. Color del texto seleccionado debe ser rosa de la oscuridad.
Active el espacio en blanco visible. (En el menú de editar , elija Avanzadas>> y haga clic en Ver espacios en blanco). escriba algunas fichas en el texto. Las flechas rojas que representan las pestañas se deben mostrar.