Puntos de extensión del editor
El editor proporciona puntos de extensión que puede extender como partes (MEF) de managed extensibility framework. Estas son las categorías principales del punto de la extensión:
tipos de contenido
Tipos de clasificación y formatos de clasificación
márgenes y barras de desplazamiento
Etiquetas
Elementos gráficos
Procesadores del mouse
Controladores de entrega
Opciones
IntelliSense
tipos de contenido que extienden
Los tipos de contenido son las definiciones de las clases de texto controlan mediante el editor, por ejemplo, “texto”, “código”, o “CSharp”. Define un nuevo tipo de contenido declarar una variable de tipo ContentTypeDefinition y da al nuevo tipo de contenido un nombre único. Para registrar el tipo de contenido con el editor, exportelo junto con los atributos siguientes:
NameAttribute es el nombre del tipo de contenido.
BaseDefinitionAttribute es el nombre del tipo de contenido del que este tipo de contenido es derivado. Un tipo de contenido puede heredar de varios otros tipos de contenido.
Porque se sella la clase de ContentTypeDefinition , puede exportarla sin parámetros de tipo.
El ejemplo siguiente muestra atributos de exportación en una definición de tipo de contenido.
[Export]
[Name("test")]
[BaseDefinition("code")]
[BaseDefinition("projection")]
internal static ContentTypeDefinition TestContentTypeDefinition;
Los tipos de contenido pueden estar basados en tipos de contenido cero o más existente. éstos son los tipos integrados:
Ninguno: el tipo de contenido básico. elemento primario del resto de los tipos de contenido.
texto: el tipo básico para el contenido de la no-proyección. Hereda de “ninguno”.
texto simple: para el texto de sin código. Hereda “text”.
código: para el código de todas las clases. Hereda “text”.
inerte: excluye el texto de cualquier clase de administrar. El texto de este tipo de contenido nunca tendrá cualquier extensión aplicado al.
proyección: el contenido de los búferes de proyección. Hereda de “ninguno”.
Intellisense: el contenido de IntelliSense. Hereda “text”.
Sighelp: ayuda de la firma. hereda de “intellisense”.
Sighelp-doc: documentación de la ayuda para las firmas. hereda de “intellisense”.
Éstos son algunos de los tipos de contenido que son definidas por Visual Studio y algunos de los lenguajes que se hospedan en Visual Studio:
Basic
C/C++
ConsoleOutput
CSharp
CSS
ENC
FindResults
F#
HTML
JScript
XAML
XML
Para detectar la lista de tipos de contenido disponibles, importe IContentTypeRegistryService, que mantiene la colección de tipos de contenido del editor. el código siguiente importa este servicio como propiedad.
[Import]
internal IContentTypeRegistryService ContentTypeRegistryService { get; set; }
Para asociar un tipo de contenido con una extensión de nombre de archivo, use FileExtensionToContentTypeDefinition.
Nota
En Visual Studio, las extensiones de nombre de archivo se registran mediante ProvideLanguageExtensionAttribute en un paquete del servicio de lenguaje.FileExtensionToContentTypeDefinition asocia un tipo de contenido MEF a una extensión de nombre de archivo que se ha registrado de esta manera.
Para exportar la extensión de nombre de archivo a la definición de tipo de contenido, debe incluir los atributos siguientes:
FileExtensionAttribute: especifica la extensión de nombre de archivo.
ContentTypeAttribute: especifica el tipo de contenido.
Porque se sella la clase de FileExtensionToContentTypeDefinition , puede exportarla sin parámetros de tipo.
El ejemplo siguiente muestra atributos de exportación en una extensión de nombre de archivo a una definición de tipo de contenido.
[Export]
[FileExtension(".test")]
[ContentType("test")]
internal static FileExtensionToContentTypeDefinition TestFileExtensionDefinition;
IFileExtensionRegistryService administra las asociaciones entre las extensiones de nombre de archivo y los tipos de contenido.
Tipos de Clasificación y formatos de Clasificación que extienden
Puede utilizar tipos de clasificación para definir las clases de texto para la que desea proporcionar diferente administrar (por ejemplo, coloreando el azul de texto de “palabra clave” y el verde de texto de “comentario”). Defina un nuevo tipo de clasificación declarar una variable de ClassificationTypeDefinition escrito y proporcionando un nombre único.
Para registrar el tipo de clasificación que con el editor, exportelo junto con los atributos siguientes:
NameAttribute: el nombre del tipo de clasificación.
BaseDefinitionAttribute: el nombre del tipo de clasificación de la que este tipo de clasificación hereda. Todos los tipos de clasificación heredan “text”, y un tipo de clasificación pueden heredar de varios otros tipos de clasificación.
Porque se sella la clase de ClassificationTypeDefinition , puede exportarla sin parámetros de tipo.
El ejemplo siguiente muestra atributos de exportación en una definición de tipo de clasificación.
[Export]
[Name("csharp.test")]
[BaseDefinition("test")]
internal static ClassificationTypeDefinition CSharpTestDefinition;
IStandardClassificationService proporciona acceso a las clasificaciones estándar. Los tipos integrados de clasificación son:
"texto"
“de lenguaje natural” (deriva “text”)
“lenguaje formal” (deriva “text”)
“cadena” (deriva de “literal”)
“carácter” (deriva de “literal”)
“numérico” (deriva de “literal”)
Un conjunto de tipos diferentes de error heredar de ErrorTypeDefinition. incluyen los tipos de error siguientes:
“error de sintaxis”
“error del compilador”
“otro error”
“warning”
Para detectar la lista de tipos disponibles de Clasificación, importe IClassificationTypeRegistryService, que mantiene la colección de tipos de clasificación del editor. el código siguiente importa este servicio como propiedad.
[Import]
internal IClassificationTypeRegistryService ClassificationTypeRegistryService { get; set; }
Puede crear una definición de formato de clasificación para el nuevo tipo de clasificación. derive una clase de ClassificationFormatDefinition y exportela con el tipo EditorFormatDefinition, así como los atributos siguientes:
NameAttribute: el nombre de formato.
DisplayNameAttribute: el nombre para mostrar del formato.
UserVisibleAttribute: especifica si el formato aparece en la página de Fuentes y colores del cuadro de diálogo de Opciones .
OrderAttribute: la prioridad del formato. los valores válidos son de Priority.
ClassificationTypeAttribute: el nombre del tipo de clasificación que a la que está asignado este formato.
El ejemplo siguiente muestra atributos de exportación en una definición de formato de clasificación.
[Export(typeof(EditorFormatDefinition))]
[ClassificationType(ClassificationTypeNames = "test")]
[Name("test")]
[DisplayName("Test")]
[UserVisible(true)]
[Order(After = Priority.Default, Before = Priority.High)]
internal sealed class TestFormat : ClassificationFormatDefinition
Para detectar la lista de formatos disponibles, importe IEditorFormatMapService, que mantiene la colección de formatos para el editor. el código siguiente importa este servicio como propiedad.
[Import]
internal IEditorFormatMapService FormatMapService { get; set; }
Márgenes que extiende y barras de desplazamiento
Los márgenes y las barras de desplazamiento son los elementos principales del editor además de la vista de texto propia de la vista. Puede proporcionar cualquier número de márgenes además de los márgenes estándar que aparecen en la vista de texto.
Implementa una interfaz de IWpfTextViewMargin para definir un margen. También debe implementar la interfaz de IWpfTextViewMarginProvider para crear el margen.
Para registrar el proveedor de código con el editor, debe exportar el proveedor junto con los atributos siguientes:
NameAttribute: el nombre del margen.
OrderAttribute: el orden en que el margen aparece, en relación con los demás márgenes.
éstos son los márgenes integrados:
“Barra de desplazamiento horizontal de WPF”
“Barra de desplazamiento vertical de WPF”
“El número de línea de WPF”
Los márgenes horizontales que tienen un atributo de orden de After="Wpf Horizontal Scrollbar" se muestran debajo del integrado, y los márgenes horizontales que tienen un atributo de orden de Before ="Wpf Horizontal Scrollbar" se muestran el marcado integrado. Los márgenes verticales correctos que tienen un atributo de orden de After="Wpf Vertical Scrollbar" se muestran a la derecha de la barra de desplazamiento. Márgenes verticales izquierdo que tienen un atributo de orden de After="Wpf Line Number Margin" aparecerá a la izquierda del margen del número de línea (si está visible).
MarginContainerAttribute: la clase de margen (izquierdo, derecho, superior, o inferior).
ContentTypeAttribute: la clase de contenido (por ejemplo, “text” o “código”) para la que el margen es válido.
El ejemplo siguiente muestra atributos de exportación en un proveedor de margen para un margen que aparece a la derecha del número de línea.
[Export(typeof(IWpfTextViewMarginProvider))]
[Name("TestMargin")]
[Order(Before = "Wpf Line Number Margin")]
[MarginContainer(PredefinedMarginNames.Left)]
[ContentType("text")]
etiquetas que extienden
Las etiquetas son una manera de asociar los datos a los diferentes tipos de texto. En muchos casos, los datos asociados se muestra como efecto visual, pero no todas las etiquetas tienen una presentación visual. Puede definir dispone la clase label implementando ITag. También debe implementar ITagger para proporcionar etiquetas para un determinado conjunto de intervalos de texto, y ITaggerProvider para proporcionar el etiquetador. Debe exportar el proveedor del etiquetador junto con los atributos siguientes:
ContentTypeAttribute: la clase de contenido (por ejemplo, “text” o “código”) para la que la etiqueta es válida.
TagTypeAttribute: la clase label.
El ejemplo siguiente muestra atributos de exportación en un proveedor de etiquetador.
[Export(typeof(ITaggerProvider))]
[ContentType("text")]
[TagType(typeof(TestTag))]
internal class TestTaggerProvider : ITaggerProvider
Las siguientes clases de etiqueta se integran:
ClassificationTag: asociado a IClassificationType.
ErrorTag: asociado a los tipos de error.
TextMarkerTag: asociado con un elemento gráfico.
Nota
Para obtener un ejemplo de TextMarkerTag, vea la definición de HighlightWordTag en tutorial: Resaltar texto.
OutliningRegionTag: asociado con regiones que se pueden expandir o contraer en esquema.
SpaceNegotiatingAdornmentTag: define el espacio que un elemento gráfico ocupa en una vista de texto. Para obtener más información sobre opciones gráficas de negociación de espacios, vea la sección siguiente.
IntraTextAdornmentTag: proporciona el espaciado automático y el tamaño del elemento gráfico.
Para buscar y utilizar etiquetas para los búferes y vistas, importe IViewTagAggregatorFactoryService o IBufferTagAggregatorFactoryService, que proporcionan ITagAggregator del tipo solicitado. el código siguiente importa este servicio como propiedad.
[Import]
internal IViewTagAggregatorFactoryService ViewTagAggregatorFactoryService { get; set; }
etiquetas y MarkerFormatDefinitions
Puede extender la clase de MarkerFormatDefinition para definir el aspecto de una etiqueta. Debe exportar la clase (como EditorFormatDefinition) con los atributos siguientes:
NameAttribute: el nombre utilizado para hacer referencia a este formato
UserVisibleAttribute: esto hace que el formato aparezca en la interfaz de usuario
En el constructor, se define el nombre para mostrar y el aspecto de la etiqueta. BackgroundColor define el color de relleno, y ForegroundColor define el color del borde. DisplayName es el nombre localizable de la definición de formato.
A continuación se muestra un ejemplo de una definición de formato:
[Export(typeof(EditorFormatDefinition))]
[Name("MarkerFormatDefinition/HighlightWordFormatDefinition")]
[UserVisible(true)]
internal class HighlightWordFormatDefinition : MarkerFormatDefinition
{
public HighlightWordFormatDefinition()
{
this.BackgroundColor = Colors.LightBlue;
this.ForegroundColor = Colors.DarkBlue;
this.DisplayName = "Highlight Word";
this.ZOrder = 5;
}
}
Para aplicar esta definición de formato a una etiqueta, haga referencia al nombre se establece en el atributo de nombre de clase (no el nombre para mostrar).
Nota
Para obtener un ejemplo de MarkerFormatDefinition, vea la clase de HighlightWordFormatDefinition en tutorial: Resaltar texto.
Elementos gráficos que extienden
Las opciones gráficas definen los efectos visuales que se pueden agregar cualquiera al texto que se muestra en una vista de texto o a la vista de texto en sí. Puede definir dispone adornment como cualquier tipo de UIElement.
En la clase del elemento gráfico, debe declarar AdornmentLayerDefinition. Para registrar el nivel del elemento gráfico, exportelo junto con los atributos siguientes:
NameAttribute: el nombre del elemento gráfico.
OrderAttribute: el orden del elemento gráfico con respecto a otros niveles de elemento gráfico. la clase PredefinedAdornmentLayers define cuatro niveles predeterminados: selección, esquematización, símbolo de intercalación, y texto.
El ejemplo siguiente muestra atributos de exportación en una definición de nivel de elemento gráfico.
[Export]
[Name("TestEmbeddedAdornment")]
[Order(After = PredefinedAdornmentLayers.Selection, Before = PredefinedAdornmentLayers.Text)]
internal AdornmentLayerDefinition testLayerDefinition;
Debe crear una segunda clase que implemente IWpfTextViewCreationListener y controle el evento de TextViewCreated creando instancias del elemento gráfico. Debe exportar esta clase junto con los atributos siguientes:
ContentTypeAttribute: la clase de contenido (por ejemplo, “text” o “código”) para la que el elemento gráfico es válida.
TextViewRoleAttribute: la clase de vista de texto para la que este elemento gráfico es válida. la clase PredefinedTextViewRoles tiene el conjunto de roles predefinidos de la vista de texto. Por ejemplo, Document se utiliza principalmente para las vistas de texto de archivos. Interactive se utiliza para las vistas de texto que un usuario puede modificar o navegar con el mouse y el teclado. Los ejemplos de las vistas de Interactive son la vista de texto del editor y la ventana de Resultados .
El ejemplo siguiente muestra atributos export en el proveedor del elemento gráfico.
[Export(typeof(IWpfTextViewCreationListener))]
[ContentType("csharp")]
[TextViewRole(PredefinedTextViewRoles.Document)]
internal sealed class TestAdornmentProvider : IWpfTextViewCreationListener
Un elemento gráfico de negociación de espacios es una ocupa espacio en el mismo nivel que el texto. Para crear este tipo de elemento gráfico, debe definir una clase de etiqueta que herede de SpaceNegotiatingAdornmentTag, que define la cantidad de espacio que el elemento gráfico ocupa.
Como con todas las opciones gráficas, debe exportar la definición del elemento gráfico.
[Export]
[Name("TestAdornment")]
[Order(After = DefaultAdornmentLayers.Text)]
internal AdornmentLayerDefinition testAdornmentLayer;
Para crear instancias del elemento gráfico de negociación de espacios, debe crear una clase que implemente ITaggerProvider, además de la clase que implementa IWpfTextViewCreationListener (como con otras clases de gráficos).
Para registrar el proveedor del etiquetador, debe exportarlo junto con los atributos siguientes:
ContentTypeAttribute: la clase de contenido (por ejemplo, “text” o “código”) para la que el elemento gráfico es válida.
TextViewRoleAttribute: la clase de vista de texto para el que esta etiqueta o elemento gráfico es válida. la clase PredefinedTextViewRoles tiene el conjunto de roles predefinidos de la vista de texto. Por ejemplo, Document se utiliza principalmente para las vistas de texto de archivos. Interactive se utiliza para las vistas de texto que un usuario puede modificar o navegar con el mouse y el teclado. Los ejemplos de las vistas de Interactive son la vista de texto del editor y la ventana de Resultados .
TagTypeAttribute: la clase label o elemento gráfico que tiene definido. Debe agregar un segundo TagTypeAttribute para SpaceNegotiatingAdornmentTag.
El ejemplo siguiente muestra atributos export en el proveedor del etiquetador para una etiqueta de negociación de espacios del elemento gráfico.
[Export(typeof(ITaggerProvider))]
[ContentType("text")]
[TextViewRole(PredefinedTextViewRoles.Document)]
[TagType(typeof(SpaceNegotiatingAdornmentTag))]
[TagType(typeof(TestSpaceNegotiatingTag))]
internal sealed class TestTaggerProvider : ITaggerProvider
Procesadores del mouse que extienden
Puede agregar un control especial para la entrada del mouse. Cree una clase que herede de MouseProcessorBase y reemplace los eventos del mouse para la entrada que desea controlar. También debe implementar IMouseProcessorProvider en otra clase y exportarlo así como ContentTypeAttribute que especifique el tipo de contenido (por ejemplo, “text” o “código”) para la que el controlador del mouse es válido.
El ejemplo siguiente muestra atributos de exportación en un proveedor de procesador de mouse.
[Export(typeof(IMouseProcessorProvider))]
[Name("test mouse processor")]
[ContentType("text")]
[TextViewRole(PredefinedTextViewRoles.Interactive)]
internal sealed class TestMouseProcessorProvider : IMouseProcessorProvider
Controladores de entrega que extienden
Puede personalizar el comportamiento de los controladores de entrega para las clases específicas de texto creando una clase que implemente IDropHandler y una segunda clase que implemente IDropHandlerProvider para crear el controlador de entrega. Debe exportar el controlador de colocación junto con los atributos siguientes:
DropFormatAttribute: el formato de texto para el que este controlador de colocación es válido. Los siguientes formatos se administran en la prioridad ordenada de mayor a menor:
cualquier formato personalizado
Filedrop
EnhancedMetafile
WaveAudio
riff
Dif
Configuración regional
Palette
PenData
Serializable
SymbolicLink
XAML
XamlPackage
TIFF
Mapa de bits
DIB
MetafilePicture
CSV
System.String
Formato HTML
UnicodeText
OEMText
Text
NameAttribute: el nombre del controlador de colocación.
OrderAttribute: el orden de controlador de colocación antes o después del controlador predeterminado de entrega. Se llama al controlador predeterminado de entrega para Visual Studio “DefaultFileDropHandler”.
El ejemplo siguiente muestra atributos de exportación en un proveedor de controlador de colocación.
[Export(typeof(IDropHandlerProvider))]
[DropFormat("Text")]
[Name("TestDropHandler")]
[Order(Before="DefaultFileDropHandler")]
internal class TestDropHandlerProvider : IDropHandlerProvider
Opciones del editor que extienden
Puede definir opciones de ser válido únicamente en un ámbito, por ejemplo, en una vista de texto. el editor proporciona a este conjunto de opciones predefinidas: opciones del editor, opciones de vista, y opciones (WPF) de la vista de Windows Presentation Foundation. Estas opciones se encuentran en DefaultOptions, DefaultTextViewOptions, y DefaultWpfViewOptions.
Para agregar una nueva opción, derive una clase de una de estas clases de definición de la opción:
el ejemplo siguiente muestra cómo exportar una definición de la opción que tenga un valor booleano.
[Export(typeof(EditorOptionDefinition))]
internal sealed class TestOption : EditorOptionDefinition<bool>
IntelliSense que extiende
IntelliSense es un término general para un grupo de características que proporcionan información sobre el texto estructurado, y la finalización de instrucciones para ella. Estas características incluyen finalización de instrucciones, la ayuda de la firma, información rápida, y etiquetas inteligentes. Los usuarios de la finalización de instrucciones escriben una palabra clave o un nombre de miembro de lenguaje correctamente. Ayuda para las firmas muestra la firma o las firmas del método que el usuario acaba de escribir. Muestra de información rápidamente una firma completa para un tipo o un nombre de miembro cuando el mouse se encuentra sobre él. Las etiquetas inteligentes proporcionan identificadores adicionales de acciones para ciertos en ciertos contextos, por ejemplo, cambiar de nombre todas las apariciones de una variable después de que se ha cambiado una aparición.
El diseño de una característica IntelliSense es igual en todos los casos:
Un agente de IntelliSense es responsable del proceso general.
Una sesión de IntelliSense representa la secuencia de eventos entre desencadenar de presentador y la perpetración o cancelar la selección. Algún gestos del usuario activa la sesión normalmente.
Un controlador de IntelliSense es responsable de decidir cuando la sesión debe iniciar y finalizar. También decide cuando la información debe ser de confianza y a cuando la sesión se debe cancelar.
Un origen de IntelliSense proporciona contenido y decide la mejor coincidencia.
Un presentador de IntelliSense es responsable de mostrar contenido.
En la mayoría de los casos, recomendamos proporciona al menos un origen y un controlador. También puede proporcionar un presentador si desea personalizar la presentación.
implementar un origen de IntelliSense
Para personalizar un origen, debe implementar una (o más) de las siguientes interfaces de origen:
Además, debe implementar un proveedor de la misma clase:
Debe exportar el proveedor junto con los atributos siguientes:
NameAttribute: el nombre del origen.
ContentTypeAttribute: la clase de contenido (por ejemplo, “text” o “código”) al que el origen aplica.
OrderAttribute: el orden en que el origen debe aparecer (con respecto a otros orígenes).
El ejemplo siguiente muestra atributos de exportación en un proveedor de origen de finalización.
Export(typeof(ICompletionSourceProvider))]
[Name(" Test Statement Completion Provider")]
[Order(Before = "default")]
[ContentType("text")]
internal class TestCompletionSourceProvider : ICompletionSourceProvider
Para obtener más información sobre cómo implementar los orígenes de IntelliSense, vea los siguientes tutoriales:
tutorial: Mostrar información sobre herramientas de QuickInfo
tutorial: Mostrar la Ayuda para las firmas
tutorial: Mostrar la finalización de instrucciones
implementar un controlador de IntelliSense
Para personalizar un controlador, debe implementar la interfaz de IIntellisenseController . Además, debe implementar un proveedor de controlador junto con los atributos siguientes:
NameAttribute: el nombre del controlador.
ContentTypeAttribute: la clase de contenido (por ejemplo, “text” o “código”) al que el controlador aplica.
OrderAttribute: el orden en el que el controlador debe aparecer (con respecto a otros controladores).
El ejemplo siguiente muestra atributos de exportación en un proveedor de controlador de finalización.
Export(typeof(IIntellisenseControllerProvider))]
[Name(" Test Controller Provider")]
[Order(Before = "default")]
[ContentType("text")]
internal class TestIntellisenseControllerProvider : IIntellisenseControllerProvider
Para obtener más información sobre cómo utilizar controladores de IntelliSense, vea los siguientes tutoriales:
tutorial: Mostrar información sobre herramientas de QuickInfo