Points d’extension éditeur et le service de langageLanguage service and editor extension points

L’éditeur fournit des points d’extension que vous pouvez étendre en tant que parties de composant Managed Extensibility Framework (MEF), y compris la plupart des fonctionnalités de service de langage.The editor provides extension points that you can extend as Managed Extensibility Framework (MEF) component parts, including most language service features. Voici les catégories de point d’extension principal :These are the main extension point categories:

  • Types de contenuContent types

  • Types de classification et de formats de classificationClassification types and classification formats

  • Marges et les barres de défilementMargins and scrollbars

  • BalisesTags

  • OrnementsAdornments

  • Processeurs de la sourisMouse processors

  • Gestionnaires de déplacementDrop handlers

  • OptionsOptions

  • IntelliSenseIntelliSense

Étendre des types de contenuExtend content types

Types de contenu sont les définitions des types de texte géré par l’éditeur, par exemple, « text », « code » ou « CSharp ».Content types are the definitions of the kinds of text handled by the editor, for example, "text", "code", or "CSharp". Vous définissez un nouveau type de contenu en déclarant une variable du type ContentTypeDefinition et en donnant le nouveau type de contenu à un nom unique.You define a new content type by declaring a variable of the type ContentTypeDefinition and giving the new content type a unique name. Pour inscrire le type de contenu avec l’éditeur, vous devez l’exporter avec les attributs suivants :To register the content type with the editor, export it together with the following attributes:

  • NameAttribute est le nom du type de contenu.NameAttribute is the name of the content type.

  • BaseDefinitionAttribute est le nom du type de contenu à partir duquel ce type de contenu est dérivé.BaseDefinitionAttribute is the name of the content type from which this content type is derived. Un type de contenu peut hériter de plusieurs autres types de contenu.A content type may inherit from multiple other content types.

    Étant donné que la ContentTypeDefinition classe est sealed, vous pouvez l’exporter avec aucun paramètre de type.Because the ContentTypeDefinition class is sealed, you can export it with no type parameter.

    L’exemple suivant montre les attributs d’exportation sur une définition de type de contenu.The following example shows export attributes on a content type definition.

[Export]  
[Name("test")]  
[BaseDefinition("code")]  
[BaseDefinition("projection")]  
internal static ContentTypeDefinition TestContentTypeDefinition;  

Types de contenu peuvent reposer sur zéro ou plusieurs types de contenu existants.Content types can be based on zero or more pre-existing content types. Voici les types intégrés :These are the built-in types:

  • Le : le type de contenu de base.Any: the basic content type. Parent de tous les autres types de contenu.Parent of all other content types.

  • Texte : le type de base pour le contenu non projection.Text: the basic type for non-projection content. Hérite de « tout ».Inherits from "any".

  • Texte en clair : pour le texte de non code.Plaintext: for non-code text. Hérite de « texte ».Inherits from "text".

  • Code : pour le code de toutes sortes.Code: for code of all kinds. Hérite de « texte ».Inherits from "text".

  • Inerte : exclut le texte à partir de n’importe quel type de gestion.Inert: excludes the text from any kind of handling. Texte de ce type de contenu n’aura jamais de n’importe quelle extension appliquée.Text of this content type will never have any extension applied to it.

  • Projection : pour le contenu de mémoires tampons de projection.Projection: for the contents of projection buffers. Hérite de « tout ».Inherits from "any".

  • IntelliSense : pour le contenu d’IntelliSense.Intellisense: for the contents of IntelliSense. Hérite de « texte ».Inherits from "text".

  • Sighelp : pour la signature.Sighelp: signature help. Hérite de « intellisense ».Inherits from "intellisense".

  • Sighelp-doc : documentation d’aide signature.Sighelp-doc: signature help documentation. Hérite de « intellisense ».Inherits from "intellisense".

    Voici certains des types de contenu qui sont définies par Visual Studio et autres langages qui sont hébergés dans Visual Studio :These are some of the content types that are defined by Visual Studio and some of the languages that are hosted in Visual Studio:

  • BasicBasic

  • C/C++C/C++

  • ConsoleOutputConsoleOutput

  • CSharpCSharp

  • CSSCSS

  • ENCENC

  • RésultatsFindResults

  • F#F#

  • HTMLHTML

  • JScriptJScript

  • XAMLXAML

  • XMLXML

    Pour découvrir la liste des types de contenu disponibles, vous devez importer le IContentTypeRegistryService, qui tient à jour la collection de types de contenu de l’éditeur.To discover the list of available content types, import the IContentTypeRegistryService, which maintains the collection of content types for the editor. Le code suivant importe ce service sous la forme d’une propriété.The following code imports this service as a property.

[Import]  
internal IContentTypeRegistryService ContentTypeRegistryService { get; set; }  

Pour associer un type de contenu avec une extension de nom de fichier, utilisez FileExtensionToContentTypeDefinition.To associate a content type with a file name extension, use FileExtensionToContentTypeDefinition.

Note

Dans Visual Studio, les extensions de nom de fichier sont inscrits à l’aide de la ProvideLanguageExtensionAttribute sur un package de service de langage.In Visual Studio, file name extensions are registered by using the ProvideLanguageExtensionAttribute on a language service package. Le FileExtensionToContentTypeDefinition associe un type de contenu de MEF avec une extension de nom de fichier qui a été inscrit de cette manière.The FileExtensionToContentTypeDefinition associates a MEF content type with a file name extension that has been registered in this manner.

Pour exporter l’extension de nom de fichier à la définition de type de contenu, vous devez inclure les attributs suivants :To export the file name extension to the content type definition, you must include the following attributes:

[Export]  
[FileExtension(".test")]  
[ContentType("test")]  
internal static FileExtensionToContentTypeDefinition TestFileExtensionDefinition;  

Le IFileExtensionRegistryService gère les associations entre les extensions de nom de fichier et les types de contenu.The IFileExtensionRegistryService manages the associations between file name extensions and content types.

Étendre les types de classification et de formats de classificationExtend classification types and classification formats

Vous pouvez utiliser les types de classification pour définir les types de texte pour lequel vous souhaitez fournir un traitement différent (par exemple, la coloration du texte « mot clé » bleu et le texte « commentaire » vert).You can use classification types to define the kinds of text for which you want to provide different handling (for example, coloring the "keyword" text blue and the "comment" text green). Définir un nouveau type de classification en déclarant une variable de type ClassificationTypeDefinition et en lui attribuant un nom unique.Define a new classification type by declaring a variable of type ClassificationTypeDefinition and giving it a unique name.

Pour inscrire le type de classification avec l’éditeur, vous devez l’exporter avec les attributs suivants :To register the classification type with the editor, export it together with the following attributes:

  • NameAttribute: le nom du type de classification.NameAttribute: the name of the classification type.

  • BaseDefinitionAttribute: le nom du type de classification à partir de laquelle hérite de ce type de classification.BaseDefinitionAttribute: the name of the classification type from which this classification type inherits. Tous les types de classification héritent de « text » et un type de classification peut hériter de plusieurs autres types de classification.All classification types inherit from "text", and a classification type may inherit from multiple other classification types.

    Étant donné que la ClassificationTypeDefinition classe est sealed, vous pouvez l’exporter avec aucun paramètre de type.Because the ClassificationTypeDefinition class is sealed, you can export it with no type parameter.

    L’exemple suivant montre les attributs d’exportation sur une définition de type de classification.The following example shows export attributes on a classification type definition.

[Export]  
[Name("csharp.test")]  
[BaseDefinition("test")]  
internal static ClassificationTypeDefinition CSharpTestDefinition;  

Le IStandardClassificationService fournit l’accès aux classifications standards.The IStandardClassificationService provides access to standard classifications. Types de classification intégrées à savoir :Built-in classification types include these:

  • « texte »"text"

  • « langage naturel » (dérive de « texte »)"natural language" (derives from "text")

  • « langage formel » (dérive de « texte »)"formal language" (derives from "text")

  • « string » (dérive de « literal »)"string" (derives from "literal")

  • « caractère » (dérive de « literal »)"character" (derives from "literal")

  • « numérique » (dérive de « literal »)"numerical" (derives from "literal")

    Un ensemble de différents types d’erreur héritent ErrorTypeDefinition.A set of different error types inherit from ErrorTypeDefinition. Ils incluent les types d’erreur suivant :They include the following error types:

  • « Erreur de syntaxe »"syntax error"

  • « Erreur du compilateur »"compiler error"

  • autres « erreur »"other error"

  • « avertissement »"warning"

    Pour découvrir la liste des types de classification disponibles, vous devez importer le IClassificationTypeRegistryService, qui tient à jour la collection de types de classification de l’éditeur.To discover the list of available classification types, import the IClassificationTypeRegistryService, which maintains the collection of classification types for the editor. Le code suivant importe ce service sous la forme d’une propriété.The following code imports this service as a property.

[Import]  
internal IClassificationTypeRegistryService ClassificationTypeRegistryService { get; set; }  

Vous pouvez définir une définition de format de classification pour votre nouveau type de classification.You can define a classification format definition for your new classification type. Dérivez une classe de ClassificationFormatDefinition et exportez-le avec le type EditorFormatDefinition, avec les attributs suivants :Derive a class from ClassificationFormatDefinition and export it with the type EditorFormatDefinition, together with the following attributes:

[Export(typeof(EditorFormatDefinition))]  
[ClassificationType(ClassificationTypeNames = "test")]  
[Name("test")]  
[DisplayName("Test")]  
[UserVisible(true)]  
[Order(After = Priority.Default, Before = Priority.High)]  
internal sealed class TestFormat : ClassificationFormatDefinition  

Pour découvrir la liste des formats disponibles, vous devez importer le IEditorFormatMapService, qui tient à jour la collection de formats pour l’éditeur.To discover the list of available formats, import the IEditorFormatMapService, which maintains the collection of formats for the editor. Le code suivant importe ce service sous la forme d’une propriété.The following code imports this service as a property.

[Import]  
internal IEditorFormatMapService FormatMapService { get; set; }  

Étendre les marges et les barres de défilementExtend margins and scrollbars

Marges et les barres de défilement sont les éléments de la vue principale de l’éditeur en plus de l’affichage de texte lui-même.Margins and scrollbars are the main view elements of the editor in addition to the text view itself. Vous pouvez fournir un nombre quelconque de marges en plus les marges standards qui apparaissent autour de l’affichage de texte.You can provide any number of margins in addition to the standard margins that appear around the text view.

Implémentez un IWpfTextViewMargin interface pour définir une marge.Implement an IWpfTextViewMargin interface to define a margin. Vous devez également implémenter la IWpfTextViewMarginProvider interface permettant de créer la marge.You must also implement the IWpfTextViewMarginProvider interface to create the margin.

Pour inscrire le fournisseur de marge avec l’éditeur, vous devez exporter le fournisseur avec les attributs suivants :To register the margin provider with the editor, you must export the provider together with the following attributes:

  • NameAttribute: le nom de la marge.NameAttribute: the name of the margin.

  • OrderAttribute: l’ordre dans lequel la marge s’affiche, par rapport à d’autres marges.OrderAttribute: the order in which the margin appears, relative to the other margins.

    Il s’agit des marges prédéfinies :These are the built-in margins:

    • « Barre de défilement horizontale de Wpf »"Wpf Horizontal Scrollbar"

    • « Barre de défilement verticale de Wpf »"Wpf Vertical Scrollbar"

    • « Marge de numéro de ligne de Wpf »"Wpf Line Number Margin"

      Les marges horizontales qui ont un attribut de l’ordre de After="Wpf Horizontal Scrollbar" s’affichent sous la marge intégrée et les marges horizontales qui ont un attribut de l’ordre de Before ="Wpf Horizontal Scrollbar" affichés au-dessus de la marge intégrée.Horizontal margins that have an order attribute of After="Wpf Horizontal Scrollbar" are displayed below the built-in margin, and horizontal margins that have an order attribute of Before ="Wpf Horizontal Scrollbar" are displayed above the built-in margin. Avec le bouton droit marges verticales qui ont un attribut de l’ordre de After="Wpf Vertical Scrollbar" sont affichés à droite de la barre de défilement.Right vertical margins that have an order attribute of After="Wpf Vertical Scrollbar" are displayed to the right of the scrollbar. Gauche des marges verticales qui ont un attribut de l’ordre de After="Wpf Line Number Margin" apparaissent à gauche de la marge de numéro de ligne (s’il est visible).Left vertical margins that have an order attribute of After="Wpf Line Number Margin" appear to the left of the line number margin (if it is visible).

  • MarginContainerAttribute: le type de marge (gauche, droite, haut ou bas).MarginContainerAttribute: the kind of margin (left, right, top, or bottom).

  • ContentTypeAttribute: le type de contenu (par exemple, « text » ou « code ») pour laquelle votre marge est valide.ContentTypeAttribute: the kind of content (for example, "text" or "code") for which your margin is valid.

    L’exemple suivant montre les attributs d’exportation sur un fournisseur de marge pour une marge s’affiche à droite de la marge de numéro de ligne.The following example shows export attributes on a margin provider for a margin that appears to the right of the line number margin.

[Export(typeof(IWpfTextViewMarginProvider))]  
[Name("TestMargin")]  
[Order(Before = "Wpf Line Number Margin")]  
[MarginContainer(PredefinedMarginNames.Left)]  
[ContentType("text")]   

Étendre des balisesExtend tags

Les balises sont un moyen d’associer des données à différents types de texte.Tags are a way of associating data with different kinds of text. Dans de nombreux cas, les données associées sont affichées en tant qu’un effet visuel, mais pas toutes les balises ont une présentation visuelle.In many cases, the associated data is displayed as a visual effect, but not all tags have a visual presentation. Vous pouvez définir votre propre type de balise en implémentant ITag.You can define your own kind of tag by implementing ITag. Vous devez également implémenter ITagger<T> pour fournir les balises pour un ensemble donné d’étendues de texte et un ITaggerProvider pour fournir la balise.You must also implement ITagger<T> to provide the tags for a given set of text spans, and an ITaggerProvider to provide the tagger. Vous devez exporter le fournisseur de baliseur ainsi que les attributs suivants :You must export the tagger provider together with the following attributes:

  • ContentTypeAttribute: le type de contenu (par exemple, « text » ou « code ») pour laquelle votre balise est valide.ContentTypeAttribute: the kind of content (for example, "text" or "code") for which your tag is valid.

  • TagTypeAttribute: le type de balise.TagTypeAttribute: the kind of tag.

    L’exemple suivant montre les attributs d’exportation sur un fournisseur de baliseur.The following example shows export attributes on a tagger provider.

88
Les types de balise suivants sont intégrés :The following kinds of tag are built-in:

[Import]  
internal IViewTagAggregatorFactoryService ViewTagAggregatorFactoryService { get; set; }  

Balises et MarkerFormatDefinitionsTags and MarkerFormatDefinitions

Vous pouvez étendre la MarkerFormatDefinition classe pour définir l’apparence d’une balise.You can extend the MarkerFormatDefinition class to define the appearance of a tag. Vous devez exporter votre classe (comme un EditorFormatDefinition) avec les attributs suivants :You must export your class (as a EditorFormatDefinition)with the following attributes:

  • NameAttribute: le nom utilisé pour référencer ce formatNameAttribute: the name used to reference this format

  • UserVisibleAttribute: cela entraîne le format d’apparaître dans l’interface utilisateurUserVisibleAttribute: this causes the format to appear in the UI

    Dans le constructeur, vous définissez le nom d’affichage et l’apparence de la balise.In the constructor, you define the display name and appearance of the tag. BackgroundColor définit la couleur de remplissage et ForegroundColor définit la couleur de bordure.BackgroundColor defines the fill color, and ForegroundColor defines the border color. Le DisplayName est le nom localisé de la définition de format.The DisplayName is the localizable name of the format definition.

    Voici un exemple d’une définition de format :The following is an example of a format definition:

[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;  
    }  
}  
  

Pour appliquer cette définition de format à une balise, référencer le nom que vous définissez dans l’attribut de nom de la classe (pas le nom d’affichage).To apply this format definition to a tag, reference the name you set in the name attribute of the class (not the display name).

Note

Pour obtenir un exemple d’un MarkerFormatDefinition, consultez la classe HighlightWordFormatDefinition dans procédure pas à pas : mise en surbrillance le texte.For an example of a MarkerFormatDefinition, see the HighlightWordFormatDefinition class in Walkthrough: Highlighting Text.

Étendre des ornementsExtend adornments

Ornements définissent des effets visuels qui peuvent être ajoutés au texte affiché dans un affichage de texte ou au texte afficher lui-même.Adornments define visual effects that can be added either to the text that is displayed in a text view or to the text view itself. Vous pouvez définir vos propres ornements comme n’importe quel type de UIElement.You can define your own adornment as any type of UIElement.

Dans votre classe d’ornement, vous devez déclarer un AdornmentLayerDefinition.In your adornment class, you must declare an AdornmentLayerDefinition. Pour inscrire votre couche d’ornement, exportez-le avec les attributs suivants :To register your adornment layer, export it together with the following attributes:

  • NameAttribute: le nom de l’ornement.NameAttribute: the name of the adornment.

  • OrderAttribute: le classement de l’ornement en ce qui concerne les autres couches de l’ornement.OrderAttribute: the ordering of the adornment with respect to other adornment layers. La classe PredefinedAdornmentLayers définit quatre couches par défaut : sélection, mode plan, du signe insertion et texte.The class PredefinedAdornmentLayers defines four default layers: Selection, Outlining, Caret, and Text.

    L’exemple suivant montre les attributs d’exportation sur une définition de couche d’ornement.The following example shows export attributes on an adornment layer definition.

[Export]  
[Name("TestEmbeddedAdornment")]  
[Order(After = PredefinedAdornmentLayers.Selection, Before = PredefinedAdornmentLayers.Text)]  
internal AdornmentLayerDefinition testLayerDefinition;  

Vous devez créer une deuxième classe qui implémente IWpfTextViewCreationListener et gère son TextViewCreated événement en instanciant l’ornement.You must create a second class that implements IWpfTextViewCreationListener and handles its TextViewCreated event by instantiating the adornment. Vous devez exporter cette classe avec les attributs suivants :You must export this class together with the following attributes:

  • ContentTypeAttribute: le type de contenu (par exemple, « text » ou « code ») pour laquelle l’ornement est valide.ContentTypeAttribute: the kind of content (for example, "text" or "code") for which the adornment is valid.

  • TextViewRoleAttribute: le type d’affichage de texte pour laquelle cet ornement est valide.TextViewRoleAttribute: the kind of text view for which this adornment is valid. La classe PredefinedTextViewRoles présente l’ensemble des rôles d’affichage de texte prédéfinis.The class PredefinedTextViewRoles has the set of predefined text view roles. Par exemple, Document est principalement utilisé pour les affichages de texte de fichiers.For example, Document is primarily used for text views of files. Interactive est utilisé pour les affichages de texte qu’un utilisateur peut modifier ou accédez à l’aide de la souris et du clavier.Interactive is used for text views that a user can edit or navigate by using a mouse and keyboard. Exemples de Interactive vues sont l’affichage de l’éditeur de texte et la sortie fenêtre.Examples of Interactive views are the editor text view and the Output window.

    L’exemple suivant montre les attributs d’exportation sur le fournisseur de l’ornement.The following example shows export attributes on the adornment provider.

[Export(typeof(IWpfTextViewCreationListener))]  
[ContentType("csharp")]  
[TextViewRole(PredefinedTextViewRoles.Document)]  
internal sealed class TestAdornmentProvider : IWpfTextViewCreationListener  

Un ornement à espace négocié est celle qui occupe le même niveau que le texte d’espace.A space-negotiating adornment is one that occupies space at the same level as the text. Pour créer ce type d’ornement, vous devez définir une classe de balise qui hérite de SpaceNegotiatingAdornmentTag, qui définit la quantité d’espace occupé par l’ornement.To create this kind of adornment, you must define a tag class that inherits from SpaceNegotiatingAdornmentTag, which defines the amount of space the adornment occupies.

Comme avec tous les ornements, vous devez exporter la définition de couche d’ornement.As with all adornments, you must export the adornment layer definition.

[Export]  
[Name("TestAdornment")]  
[Order(After = DefaultAdornmentLayers.Text)]  
internal AdornmentLayerDefinition testAdornmentLayer;  

Pour instancier l’ornement à espace négocié, vous devez créer une classe qui implémente ITaggerProvider, en plus de la classe qui implémente IWpfTextViewCreationListener (comme les autres types d’ornements).To instantiate the space-negotiating adornment, you must create a class that implements ITaggerProvider, in addition to the class that implements IWpfTextViewCreationListener (as with other kinds of adornments).

Pour inscrire le fournisseur de baliseur, vous devez l’exporter avec les attributs suivants :To register the tagger provider, you must export it together with the following attributes:

  • ContentTypeAttribute: le type de contenu (par exemple, « text » ou « code ») pour laquelle votre ornement est valide.ContentTypeAttribute: the kind of content (for example, "text" or "code") for which your adornment is valid.

  • TextViewRoleAttribute: le type d’affichage de texte pour lequel cet ornement ou la balise est valide.TextViewRoleAttribute: the kind of text view for which this tag or adornment is valid. La classe PredefinedTextViewRoles présente l’ensemble des rôles d’affichage de texte prédéfinis.The class PredefinedTextViewRoles has the set of predefined text view roles. Par exemple, Document est principalement utilisé pour les affichages de texte de fichiers.For example, Document is primarily used for text views of files. Interactive est utilisé pour les affichages de texte qu’un utilisateur peut modifier ou accédez à l’aide de la souris et du clavier.Interactive is used for text views that a user can edit or navigate by using a mouse and keyboard. Exemples de Interactive vues sont l’affichage de l’éditeur de texte et la sortie fenêtre.Examples of Interactive views are the editor text view and the Output window.

  • TagTypeAttribute: le type de balise ou ornement que vous avez définies.TagTypeAttribute: the kind of tag or adornment that you have defined. Vous devez ajouter un deuxième TagTypeAttribute pour SpaceNegotiatingAdornmentTag.You must add a second TagTypeAttribute for SpaceNegotiatingAdornmentTag.

    L’exemple suivant montre les attributs d’exportation sur le fournisseur de baliseur pour une balise d’ornement à espace négocié.The following example shows export attributes on the tagger provider for a space-negotiating adornment tag.

[Export(typeof(ITaggerProvider))]  
[ContentType("text")]  
[TextViewRole(PredefinedTextViewRoles.Document)]  
[TagType(typeof(SpaceNegotiatingAdornmentTag))]  
[TagType(typeof(TestSpaceNegotiatingTag))]  
internal sealed class TestTaggerProvider : ITaggerProvider  

Extension des processeurs de la sourisExtending Mouse Processors

Vous pouvez ajouter un traitement spécial pour l’entrée de la souris.You can add special handling for mouse input. Créez une classe qui hérite de MouseProcessorBase et remplacer les événements de souris pour l’entrée que vous souhaitez gérer.Create a class that inherits from MouseProcessorBase and override the mouse events for the input you want to handle. Vous devez également implémenter IMouseProcessorProvider dans une deuxième classe et exportez-le avec la ContentTypeAttribute qui spécifie le type de contenu (par exemple, « text » ou « code ») pour laquelle votre gestionnaire de la souris est valide.You must also implement IMouseProcessorProvider in a second class and export it together with the ContentTypeAttribute that specifies the kind of content (for example, "text" or "code") for which your mouse handler is valid.

L’exemple suivant montre les attributs d’exportation sur un fournisseur de processeur de la souris.The following example shows export attributes on a mouse processor provider.

[Export(typeof(IMouseProcessorProvider))]  
[Name("test mouse processor")]  
[ContentType("text")]  
[TextViewRole(PredefinedTextViewRoles.Interactive)]   
internal sealed class TestMouseProcessorProvider : IMouseProcessorProvider  

Étendre des gestionnaires de déplacementExtend drop handlers

Vous pouvez personnaliser le comportement des gestionnaires de déplacement pour certains types de texte en créant une classe qui implémente IDropHandler et une deuxième classe qui implémente IDropHandlerProvider pour créer le Gestionnaire de déplacement.You can customize the behavior of drop handlers for specific kinds of text by creating a class that implements IDropHandler and a second class that implements IDropHandlerProvider to create the drop handler. Vous devez exporter le Gestionnaire de déplacement, ainsi que les attributs suivants :You must export the drop handler together with the following attributes:

  • DropFormatAttribute: le format de texte pour laquelle ce gestionnaire de déplacement est valide.DropFormatAttribute: the text format for which this drop handler is valid. Les formats suivants sont traités par ordre de priorité du plus élevé au plus bas :The following formats are handled in priority order from highest to lowest:

    1. N’importe quel format personnaliséAny custom format

    2. FileDropFileDrop

    3. EnhancedMetafileEnhancedMetafile

    4. WaveAudioWaveAudio

    5. RIFFRiff

    6. DIFDif

    7. Paramètres régionauxLocale

    8. PalettePalette

    9. PenDataPenData

    10. SérialisableSerializable

    11. SymbolicLinkSymbolicLink

    12. XAMLXaml

    13. XamlPackageXamlPackage

    14. TIFFTiff

    15. BitmapBitmap

    16. DIBDib

    17. MetafilePictureMetafilePicture

    18. CSVCSV

    19. System.StringSystem.String

    20. Format HTMLHTML Format

    21. UnicodeTextUnicodeText

    22. OEMTextOEMText

    23. TexteText

  • NameAttribute: le nom du Gestionnaire de liste.NameAttribute: the name of the drop handler.

  • OrderAttribute: le classement du Gestionnaire de déplacement avant ou après le Gestionnaire de déplacement par défaut.OrderAttribute: the ordering of the drop handler before or after the default drop handler. Le Gestionnaire de déplacement par défaut pour Visual Studio est nommé « DefaultFileDropHandler ».The default drop handler for Visual Studio is named "DefaultFileDropHandler".

    L’exemple suivant montre les attributs d’exportation sur un fournisseur de gestionnaire de liste.The following example shows export attributes on a drop handler provider.

[Export(typeof(IDropHandlerProvider))]  
[DropFormat("Text")]   
[Name("TestDropHandler")]  
[Order(Before="DefaultFileDropHandler")]   
internal class TestDropHandlerProvider : IDropHandlerProvider  

Extension des Options de l’éditeurExtending Editor Options

Vous pouvez définir des options pour être valide uniquement dans une certaine étendue, par exemple, dans un affichage de texte.You can define options to be valid only in a certain scope, for example, in a text view. L’éditeur fournit cet ensemble d’options prédéfinies : options de vue de Windows Presentation Foundation (WPF), les options d’affichage et les options de l’éditeur.The editor provides this set of predefined options: editor options, view options, and Windows Presentation Foundation (WPF) view options. Vous trouverez ces options dans DefaultOptions, DefaultTextViewOptions, et DefaultWpfViewOptions.These options can be found in DefaultOptions, DefaultTextViewOptions, and DefaultWpfViewOptions.

Pour ajouter une nouvelle option, dérivez une classe à partir d’une de ces classes de définition d’option :To add a new option, derive a class from one of these option definition classes:

[Export(typeof(EditorOptionDefinition))]  
internal sealed class TestOption : EditorOptionDefinition<bool>  

Étendre IntelliSenseExtend IntelliSense

IntelliSense est un terme général qui désigne un groupe de fonctionnalités qui fournissent des informations sur le texte structuré et la saisie semi-automatique des instructions pour lui.IntelliSense is a general term for a group of features that provide information about structured text, and statement completion for it. Ces fonctionnalités incluent la saisie semi-automatique des instructions, pour la signature, Info Express et des ampoules.These features include statement completion, signature help, Quick Info, and light bulbs. Saisie semi-automatique des instructions permet aux utilisateurs d’entrer un nom de langage mot clé ou un membre correctement.Statement completion helps users type a language keyword or member name correctly. Pour la signature affiche la signature ou les signatures pour la méthode que l’utilisateur a tapé juste.Signature help displays the signature or signatures for the method that the user has just typed. Infos Express affiche une signature complète pour un nom de type ou membre lorsque la souris se trouve sur celui-ci.Quick Info displays a complete signature for a type or member name when the mouse rests on it. Ampoule fournissent des actions supplémentaires pour certains identificateurs dans certains contextes, par exemple, renommer toutes les occurrences d’une variable après qu’une occurrence a été renommée.Light bulb provide additional actions for certain identifiers in certain contexts, for example, renaming all occurrences of a variable after one occurrence has been renamed.

La conception d’une fonctionnalité IntelliSense est très similaire dans tous les cas :The design of an IntelliSense feature is much the same in all cases:

  • Un IntelliSense broker est responsable de l’ensemble du processus.An IntelliSense broker is responsible for the overall process.

  • Un IntelliSense session représente la séquence d’événements entre le déclenchement du présentateur et descendant ou d’annulation de la sélection.An IntelliSense session represents the sequence of events between the triggering of the presenter and the committal or cancellation of the selection. La session est généralement déclenchée par un mouvement utilisateur.The session is typically triggered by some user gesture.

  • Un IntelliSense contrôleur est chargé de décider quand la session doit commencer et se terminer.An IntelliSense controller is responsible for deciding when the session should start and end. Il choisit également quand les informations doivent être validées et lorsque la session doit être annulée.It also decides when the information should be committed and when the session should be cancelled.

  • Un IntelliSense source fournit le contenu et décide de la meilleure correspondance.An IntelliSense source provides the content and decides the best match.

  • Un IntelliSense présentateur est chargée d’afficher le contenu.An IntelliSense presenter is responsible for displaying the content.

    Dans la plupart des cas, nous vous recommandons de fournir au moins une source et un contrôleur.In most cases, we recommend that you provide at least a source and a controller. Vous pouvez également fournir un présentateur si vous souhaitez personnaliser l’affichage.You can also provide a presenter if you want to customize the display.

Implémenter une Source d’IntelliSenseImplement an IntelliSense Source

Pour personnaliser une source, vous devez implémenter un (ou plusieurs) des interfaces de source suivantes :To customize a source, you must implement one (or more) of the following source interfaces:

Important

ISmartTagSource a été déconseillé en faveur de ISuggestedActionsSource.ISmartTagSource has been deprecated in favor of ISuggestedActionsSource.

En outre, vous devez implémenter un fournisseur du même type :In addition, you must implement a provider of the same kind:

Important

ISmartTagSourceProvider a été déconseillé en faveur de ISuggestedActionsSourceProvider.ISmartTagSourceProvider has been deprecated in favor of ISuggestedActionsSourceProvider.

Vous devez exporter le fournisseur avec les attributs suivants :You must export the provider together with the following attributes:

  • NameAttribute: le nom de la source.NameAttribute: the name of the source.

  • ContentTypeAttribute: le type de contenu (par exemple, « text » ou « code ») à laquelle s’applique la source.ContentTypeAttribute: the kind of content (for example, "text" or "code") to which the source applies.

  • OrderAttribute: l’ordre dans lequel la source doit s’afficher (par rapport à d’autres sources).OrderAttribute: the order in which the source should appear (with respect to other sources).

  • L’exemple suivant montre les attributs d’exportation sur un fournisseur de source de saisie semi-automatique.The following example shows export attributes on a completion source provider.

Export(typeof(ICompletionSourceProvider))]  
[Name(" Test Statement Completion Provider")]  
[Order(Before = "default")]  
[ContentType("text")]  
internal class TestCompletionSourceProvider : ICompletionSourceProvider  

Pour plus d’informations sur l’implémentation des sources d’IntelliSense, consultez les procédures suivantes :For more information about implementing IntelliSense sources, see the following walkthroughs:

Procédure pas à pas : Info-bulles Info Express d’affichageWalkthrough: Display QuickInfo tooltips

Procédure pas à pas : Afficher l’aide de la SignatureWalkthrough: Display Signature Help

Procédure pas à pas : afficher la saisie semi-automatique des instructionsWalkthrough: Display statement completion

Implémenter un contrôleur IntelliSenseImplement an IntelliSense controller

Pour personnaliser un contrôleur, vous devez implémenter le IIntellisenseController interface.To customize a controller, you must implement the IIntellisenseController interface. En outre, vous devez implémenter un fournisseur de contrôleur avec les attributs suivants :In addition, you must implement a controller provider together with the following attributes:

  • NameAttribute: le nom du contrôleur.NameAttribute: the name of the controller.

  • ContentTypeAttribute: le type de contenu (par exemple, « text » ou « code ») à laquelle s’applique le contrôleur.ContentTypeAttribute: the kind of content (for example, "text" or "code") to which the controller applies.

  • OrderAttribute: l’ordre dans lequel le contrôleur doit s’afficher (par rapport à d’autres contrôleurs).OrderAttribute: the order in which the controller should appear (with respect to other controllers).

    L’exemple suivant montre les attributs d’exportation sur un fournisseur de contrôleur de saisie semi-automatique.The following example shows export attributes on a completion controller provider.

Export(typeof(IIntellisenseControllerProvider))]  
[Name(" Test Controller Provider")]  
[Order(Before = "default")]  
[ContentType("text")]  
internal class TestIntellisenseControllerProvider : IIntellisenseControllerProvider  

Pour plus d’informations sur l’utilisation des contrôleurs IntelliSense, consultez les procédures suivantes :For more information about using IntelliSense controllers, see the following walkthroughs:

Procédure pas à pas : Info-bulles Info Express d’affichageWalkthrough: Display QuickInfo tooltips