Punti di estensione di editor
L'editor fornisce i punti di estensione che è possibile estendere come elementi del Framework (MEF) di estensibilità gestito. Si tratta delle categorie principali del punto di estensione:
tipi di contenuto
tipi di classificazione e formati di classificazione
margini e barre di scorrimento
Tag
Aree di controllo
Processori del mouse
rilasciare i gestori
Opzioni
IntelliSense
Tipi di contenuto estensione
I tipi di contenuto sono le definizioni dei tipi di testo gestiti dall' editor, ad esempio, “testo„, “codice„, o “di CSharp„. Si definisce un nuovo tipo di contenuto dichiarando una variabile di tipo ContentTypeDefinition e fornendo al nuovo tipo di contenuto un nome univoco. per registrare il tipo di contenuto con l'editor, esportarlo insieme ai seguenti attributi:
NameAttribute è il nome del tipo di contenuto.
BaseDefinitionAttribute è il nome del tipo di contenuto da cui il tipo di contenuto è derivato. Un tipo di contenuto può ereditare da più altri tipi di contenuto.
Poiché la classe di ContentTypeDefinition è sealed, è possibile esportarlo senza il parametro di tipo.
In l ' esempio seguente vengono illustrati gli attributi di esportazione in una definizione di tipo di contenuto.
[Export]
[Name("test")]
[BaseDefinition("code")]
[BaseDefinition("projection")]
internal static ContentTypeDefinition TestContentTypeDefinition;
i tipi di contenuto possono essere basati tipi di contenuto su zero o più preesistenti. Si tratta dei tipi incorporati:
Qualsiasi: il tipo di contenuto di base. Elemento padre di tutti gli altri tipi di contenuto.
testo: il tipo di base per il contenuto non di proiezione. Eredita da “uno„.
solo testo: per il testo non di codice. Eredita da “testo„.
codice: per il codice di tutti i tipi. Eredita da “testo„.
inerte: esclude il testo da qualsiasi tipo di gestione. Il testo di questo tipo di contenuto non sarà mai alcuna estensione applicata a.
proiezione: per il contenuto del buffer di proiezione. Eredita da “uno„.
Intellisense: per il contenuto di IntelliSense. Eredita da “testo„.
Sighelp: supporto di firma. Eredita da “intellisense„.
Sighelp-doc: documentazione di supporto firma. Eredita da “intellisense„.
Di seguito sono riportati alcuni dei tipi di contenuto definiti da Visual Studio e alcuni dei linguaggi contenuti in Visual Studio:
Autenticazione di base
C/C++
ConsoleOutput
CSharp
CSS
ENC
FindResults
F#
HTML
JScript
XAML
XML
Per individuare l'elenco dei tipi di contenuto disponibili, importare IContentTypeRegistryService, che mantiene la raccolta di tipi di contenuto per l'editor. Il codice seguente è incluso il servizio come proprietà.
[Import]
internal IContentTypeRegistryService ContentTypeRegistryService { get; set; }
Per associare un tipo di contenuto con un'estensione di file, utilizzare FileExtensionToContentTypeDefinition.
Nota
In Visual Studio, le estensioni di file registrate tramite ProvideLanguageExtensionAttribute in un pacchetto del servizio di linguaggio.FileExtensionToContentTypeDefinition associa un tipo di contenuto del framework MEF con l'estensione di file che è stata registrata in questo modo.
Per esportare l'estensione di file nella definizione del tipo di contenuto, è necessario includere gli attributi seguenti:
FileExtensionAttribute: specifica l'estensione di file.
ContentTypeAttribute: specifica il tipo di contenuto.
Poiché la classe di FileExtensionToContentTypeDefinition è sealed, è possibile esportarlo senza il parametro di tipo.
In l ' esempio seguente vengono illustrati gli attributi di esportazione all' estensione di file a una definizione di tipo di contenuto.
[Export]
[FileExtension(".test")]
[ContentType("test")]
internal static FileExtensionToContentTypeDefinition TestFileExtensionDefinition;
IFileExtensionRegistryService gestisce le associazioni tra estensioni di file e tipi di contenuto.
Tipi di classificazione e formati estensione di classificazione
È possibile utilizzare i tipi di classificazione per definire i tipi di testo per il quale si desidera fornire la gestione diverso (ad esempio, con il testo “parola chiave„ blu e il colore del testo “di commento„). Definire un nuovo tipo di classificazione dichiarare una variabile di tipo ClassificationTypeDefinition e assegnandole un nome univoco.
per registrare il tipo di classificazione con l'editor, esportarlo insieme ai seguenti attributi:
NameAttribute: il nome del tipo di classificazione.
BaseDefinitionAttribute: il nome del tipo di classificazione da cui questo tipo di classificazione eredita da. Tutti i tipi di classificazione ereditano da “testo„ e un tipo di classificazione possibile ereditare da più altri tipi di classificazione.
Poiché la classe di ClassificationTypeDefinition è sealed, è possibile esportarlo senza il parametro di tipo.
In l ' esempio seguente vengono illustrati gli attributi di esportazione in una definizione di tipo di classificazione.
[Export]
[Name("csharp.test")]
[BaseDefinition("test")]
internal static ClassificationTypeDefinition CSharpTestDefinition;
IStandardClassificationService fornisce l'accesso alle classificazioni standard. I tipi incorporati di classificazione includono i seguenti:
"testo"
“del linguaggio naturale„ (deriva da “testo„)
“linguaggio formale„ (deriva da “testo„)
“stringa„ (deriva da “valore letterale„)
“carattere„ (deriva da “valore letterale„)
“numerico„ (deriva da “valore letterale„)
Un set di tipi di errore diversi eredita da ErrorTypeDefinition. Includono i seguenti tipi di errore:
“errore di sintassi„
“errore del compilatore„
“altro errore„
“avviso„
Per individuare l'elenco dei tipi disponibili di classificazione, importare IClassificationTypeRegistryService, che mantiene la raccolta di tipi di classificazione per l'editor. Il codice seguente è incluso il servizio come proprietà.
[Import]
internal IClassificationTypeRegistryService ClassificationTypeRegistryService { get; set; }
È possibile definire una definizione di formato di classificazione del nuovo tipo di classificazione. Derivare la classe da ClassificationFormatDefinition ed esportarla con il tipo EditorFormatDefinition, insieme ai seguenti attributi:
NameAttribute: il nome del formato.
DisplayNameAttribute: il nome visualizzato del formato.
UserVisibleAttribute: specifica se il formato viene visualizzato nella pagina di Tipi di carattere e colori della finestra di dialogo di Opzioni .
OrderAttribute: la priorità del formato. i valori validi provengono da Priority.
ClassificationTypeAttribute: il nome del tipo di classificazione che questo formato è mappato.
I seguenti attributi di esportazione di esempio che segue viene illustrata una classificazione alla definizione.
[Export(typeof(EditorFormatDefinition))]
[ClassificationType(ClassificationTypeNames = "test")]
[Name("test")]
[DisplayName("Test")]
[UserVisible(true)]
[Order(After = Priority.Default, Before = Priority.High)]
internal sealed class TestFormat : ClassificationFormatDefinition
Per individuare l'elenco dei formati disponibili, importare IEditorFormatMapService, che mantiene la raccolta di formati per l'editor. Il codice seguente è incluso il servizio come proprietà.
[Import]
internal IEditorFormatMapService FormatMapService { get; set; }
Margini e barre di scorrimento estensione
I margini e le barre di scorrimento rappresentano gli elementi visivi principali dell' editor oltre alla visualizzazione di testo stesso. È possibile fornire un numero qualsiasi dei margini oltre ai margini standard visualizzate intorno alla visualizzazione di testo.
implementare un'interfaccia di IWpfTextViewMargin per definire un margine. È necessario implementare anche l'interfaccia di IWpfTextViewMarginProvider per creare il margine.
Per registrare il provider dei margini con l'editor, è necessario esportare il provider con i seguenti attributi:
NameAttribute: il nome del margine.
OrderAttribute: il decreto in cui il margine viene visualizzato, rispetto agli altri margini.
Si tratta dei margini incorporati:
“Barra di scorrimento orizzontale WPF„
“Barra di scorrimento verticale WPF„
“Margine del numero di riga WPF„
I margini orizzontali che presentano l'attributo dell' ordine di After="Wpf Horizontal Scrollbar" visualizzato nel margine incorporato e i margini orizzontali che presentano l'attributo dell' ordine di Before ="Wpf Horizontal Scrollbar" visualizzato sul bordo incorporato. I margini destro margini verticali che presentano l'attributo dell' ordine di After="Wpf Vertical Scrollbar" visualizzate a destra della barra di scorrimento. Margini verticali sinistra che eseguono un attributo di ordini vengano visualizzati di After="Wpf Line Number Margin" a sinistra del margine del numero di riga (se è visibile).
MarginContainerAttribute: il tipo di margine (sinistro, destro, superiore, o in basso).
ContentTypeAttribute: il tipo di contenuto (ad esempio, “testo„ o “my code„) per il quale il margine è valido.
In l ' esempio seguente vengono illustrati gli attributi di esportazione su un provider del margine di un margine visualizzato a destra del margine del numero di riga.
[Export(typeof(IWpfTextViewMarginProvider))]
[Name("TestMargin")]
[Order(Before = "Wpf Line Number Margin")]
[MarginContainer(PredefinedMarginNames.Left)]
[ContentType("text")]
Tag estensione
I tag sono una modalità di associazione dati con diversi tipi di testo. In molti casi, i dati associati vengono visualizzati come effetto visivo, ma non tutti i tag sono una presentazione visiva. È possibile definire diventi proprietaria del tipo di tag implementando ITag. È inoltre necessario implementare ITagger per fornire i tag per un set specifico di intervalli di testo e ITaggerProvider per fornire il tagger. È necessario esportare il provider di tagger insieme ai seguenti attributi:
ContentTypeAttribute: il tipo di contenuto (ad esempio, “testo„ o “my code„) per il quale il tag è valido.
TagTypeAttribute: il tipo di tag.
In l ' esempio seguente vengono illustrati gli attributi di esportazione su un provider di tagger.
[Export(typeof(ITaggerProvider))]
[ContentType("text")]
[TagType(typeof(TestTag))]
internal class TestTaggerProvider : ITaggerProvider
i seguenti tipi di tag sono incorporati:
ClassificationTag: associato a IClassificationType.
ErrorTag: associato ai tipi di errore.
TextMarkerTag: associato a un'area di controllo.
Nota
Per un esempio di TextMarkerTag, vedere la definizione di HighlightWordTag in procedura dettagliata: Evidenziazione del testo.
OutliningRegionTag: associata alle aree che possono essere espanse o compresse nella struttura.
SpaceNegotiatingAdornmentTag: definisce lo spazio che un ornamento occupa in una visualizzazione di testo. Per ulteriori informazioni sulle aree di controllo di negoziazione spazio, vedere la sezione seguente.
IntraTextAdornmentTag: fornisce la spaziatura automatica e il ridimensionamento per l'area di controllo.
Per trovare e utilizzare i tag per i buffer e le visualizzazioni, importare IViewTagAggregatorFactoryService o IBufferTagAggregatorFactoryService, che consentono ITagAggregator del tipo richiesto. Il codice seguente è incluso il servizio come proprietà.
[Import]
internal IViewTagAggregatorFactoryService ViewTagAggregatorFactoryService { get; set; }
tag e MarkerFormatDefinitions
È possibile estendere la classe di MarkerFormatDefinition per definire l'aspetto di un tag. È necessario esportare la classe (ad esempio EditorFormatDefinition) con gli attributi seguenti:
NameAttribute: il nome utilizzato per fare riferimento a questo formato
UserVisibleAttribute: in questo modo il formato a visualizzato nell' interfaccia utente
In il costruttore, si definisce il nome visualizzato e l'aspetto del tag. BackgroundColor definisce il colore di riempimento e ForegroundColor definisce il colore del bordo. DisplayName è il nome localizzabile della definizione di formato.
Di seguito viene riportato un esempio di una definizione di 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;
}
}
Per applicare la definizione del formato di un tag, fare riferimento al nome si imposta nell' attributo del nome della classe (non il nome visualizzato).
Nota
Per un esempio di MarkerFormatDefinition, vedere la classe di HighlightWordFormatDefinition in procedura dettagliata: Evidenziazione del testo.
Aree di controllo estensione
Gli attributi definiscono gli effetti visivi che possono essere aggiunti o al testo visualizzato in una visualizzazione di testo o alla visualizzazione di testo stessa. È possibile definire diventi proprietaria l'area di controllo come qualsiasi tipo di UIElement.
In la classe dell' area di controllo, è necessario dichiarare AdornmentLayerDefinition. Per registrare il livello dell' area di controllo, esportarlo insieme ai seguenti attributi:
NameAttribute: il nome dell' area di controllo.
OrderAttribute: l'ordine dell' area di controllo relative all' altro ornamento livelli. la classe PredefinedAdornmentLayers definisce quattro livelli predefiniti: selezione, struttura, cursore e testo.
I seguenti attributi di esportazione di esempio che segue viene illustrata in un'area di controllo funziona a livello la definizione.
[Export]
[Name("TestEmbeddedAdornment")]
[Order(After = PredefinedAdornmentLayers.Selection, Before = PredefinedAdornmentLayers.Text)]
internal AdornmentLayerDefinition testLayerDefinition;
È necessario creare una seconda classe che implementa IWpfTextViewCreationListener e gestirne il relativo evento di TextViewCreated creare un'istanza dell' area di controllo. È necessario esportare questa classe insieme ai seguenti attributi:
ContentTypeAttribute: il tipo di contenuto (ad esempio, “testo„ o “my code„) per il quale l'area di controllo è valido.
TextViewRoleAttribute: il tipo di visualizzazione di testo per il quale questo ornamento è valido. La classe PredefinedTextViewRoles ha il set di ruoli della visualizzazione di testo predefinito. Ad esempio, Document viene principalmente utilizzato per le visualizzazioni di testo dei file. Interactive viene utilizzato per le visualizzazioni di testo che un utente può modificare o per spostarsi utilizzando il mouse e la tastiera. Esempi di visualizzazione di Interactive sono la visualizzazione di testo dell' editor e la finestra di output.
In l ' esempio seguente vengono illustrati gli attributi di esportazione sul provider dell' area di controllo.
[Export(typeof(IWpfTextViewCreationListener))]
[ContentType("csharp")]
[TextViewRole(PredefinedTextViewRoles.Document)]
internal sealed class TestAdornmentProvider : IWpfTextViewCreationListener
Un'area di controllo di negoziazione spazio è quella che occupa spazio allo stesso livello di testo. Per creare questo tipo di area di controllo, è necessario definire una classe di tag che eredita da SpaceNegotiatingAdornmentTag, che definisce la quantità di spazio che l'area di controllo occupa.
Come con tutti gli attributi, è necessario esportare la definizione del livello dell' area di controllo.
[Export]
[Name("TestAdornment")]
[Order(After = DefaultAdornmentLayers.Text)]
internal AdornmentLayerDefinition testAdornmentLayer;
Per creare un'istanza dell' area di controllo di negoziazione spazio, è necessario creare una classe che implementa ITaggerProvider, oltre alla classe che implementa IWpfTextViewCreationListener (come per altri tipi di area di controllo).
Per registrare il provider di tagger, è necessario esportarlo insieme ai seguenti attributi:
ContentTypeAttribute: il tipo di contenuto (ad esempio, “testo„ o “my code„) per il quale l'area di controllo è valido.
TextViewRoleAttribute: il tipo di visualizzazione di testo per il quale questo tag o ornamento è valido. La classe PredefinedTextViewRoles ha il set di ruoli della visualizzazione di testo predefinito. Ad esempio, Document viene principalmente utilizzato per le visualizzazioni di testo dei file. Interactive viene utilizzato per le visualizzazioni di testo che un utente può modificare o per spostarsi utilizzando il mouse e la tastiera. Esempi di visualizzazione di Interactive sono la visualizzazione di testo dell' editor e la finestra di output.
TagTypeAttribute: il tipo di tag o ornamento definito. È necessario aggiungere un secondo TagTypeAttribute per SpaceNegotiatingAdornmentTag.
In l ' esempio seguente vengono illustrati gli attributi di esportazione sul provider di tagger per un tag di controllo di negoziazione spazio dell' area di controllo.
[Export(typeof(ITaggerProvider))]
[ContentType("text")]
[TextViewRole(PredefinedTextViewRoles.Document)]
[TagType(typeof(SpaceNegotiatingAdornmentTag))]
[TagType(typeof(TestSpaceNegotiatingTag))]
internal sealed class TestTaggerProvider : ITaggerProvider
Processori per l'estensione del mouse
È possibile aggiungere una gestione speciale per l'input del mouse. Creare una classe che eredita da MouseProcessorBase ed eseguire l'override degli eventi del mouse per l'input che si desidera gestire. È inoltre necessario implementare IMouseProcessorProvider in una seconda classe ed esportarla insieme a ContentTypeAttribute che specifica il tipo di contenuto (ad esempio, “testo„ o “my code„) per il quale il gestore del mouse è valida.
In l ' esempio seguente vengono illustrati gli attributi di esportazione su un provider del processore del mouse.
[Export(typeof(IMouseProcessorProvider))]
[Name("test mouse processor")]
[ContentType("text")]
[TextViewRole(PredefinedTextViewRoles.Interactive)]
internal sealed class TestMouseProcessorProvider : IMouseProcessorProvider
Gestori estensione di trascinamento
È possibile personalizzare il comportamento dei gestori della selezione per tipi specifici di testo creando una classe che implementa IDropHandler e una seconda classe che implementa IDropHandlerProvider per creare il gestore del trascinamento. È necessario esportare il gestore del trascinamento con i seguenti attributi:
DropFormatAttribute: il formato del testo per il quale questo gestore del trascinamento è valido. I seguenti formati sono gestiti in ordine di priorità da più elevato quanto più in basso:
qualsiasi formato personalizzato
FileDrop
EnhancedMetafile
WaveAudio
riff
Dif
Impostazioni locali
Palette
PenData
serializzabile
SymbolicLink
XAML
XamlPackage
TIFF
Bitmap
Pescare utilizzando provoca l'esca sull'acqua
MetafilePicture
CSV
System.String
Formato HTML
UnicodeText
OEMText
Text
NameAttribute: il nome del gestore del trascinamento.
OrderAttribute: l'ordine del gestore del trascinamento prima o dopo il gestore predefinito di trascinamento. Il gestore predefinito della selezione per Visual Studio è denominato “DefaultFileDropHandler„.
In l ' esempio seguente vengono illustrati gli attributi di esportazione su un provider del gestore del trascinamento.
[Export(typeof(IDropHandlerProvider))]
[DropFormat("Text")]
[Name("TestDropHandler")]
[Order(Before="DefaultFileDropHandler")]
internal class TestDropHandlerProvider : IDropHandlerProvider
Opzioni di estensione di editor
È possibile definire le opzioni essere valido solo in un determinato ambito, ad esempio, in una visualizzazione di testo. L'editor fornisce il set di opzioni predefinite: le opzioni dell' editor, le opzioni di visualizzazione e Windows (WPF) Presentation Foundation visualizzare le opzioni. Queste opzioni sono disponibili in DefaultOptions, in DefaultTextViewOptionse in DefaultWpfViewOptions.
Per aggiungere una nuova opzione, derivare una classe da una di queste classi della definizione dell' opzione:
In l ' esempio seguente viene illustrato come esportare una definizione dell' opzione che dispone di un valore booleano.
[Export(typeof(EditorOptionDefinition))]
internal sealed class TestOption : EditorOptionDefinition<bool>
IntelliSense estensione
IntelliSense è un termine generale per un gruppo di funzionalità che forniscono informazioni su testo strutturato e il completamento delle istruzioni per. Queste funzionalità includono il completamento delle istruzioni, il supporto di firma, le informazioni rapide e smart tag. Aiuta gli utenti di completamento delle istruzioni digitare una parola chiave o nome del membro del linguaggio correttamente. Il supporto di firma per visualizzare la firma o le firme del metodo che l'utente ha immesso. Le informazioni rapide visualizzare una firma completa per un tipo o un nome di membro quando il mouse viene posizionato sopra di. Gli smart tag forniscono le azioni aggiuntive per alcuni identificatori in determinati contesti, ad esempio, ridenominazione tutte le occorrenze di una variabile dopo che una occorrenza è stata rinominata.
La progettazione di una funzionalità di IntelliSense è pressoché in tutti i casi:
Un Service Broker di IntelliSense è responsabile del processo complessivo.
Una sessione IntelliSense rappresenta la sequenza di eventi tra l'attivazione del presentatore e dell'impegnativa o l'annullamento della selezione. La sessione in genere viene attivata da un'azione dell' utente.
Un controller IntelliSense è responsabile della decisione al termine della sessione deve iniziare e terminare. Anche decidere quando le informazioni devono essere salvati e se la sessione deve essere annullata.
Un'origine di IntelliSense fornisce contenuto e decide corrispondenza ottimale.
Un presentatore IntelliSense è responsabile della visualizzazione del contenuto.
In la maggior parte dei casi, è consigliabile assegnare almeno un database di origine e un controller. È anche possibile fornire un presentatore se si desidera personalizzare la visualizzazione.
Per distribuire un database di origine IntelliSense
Per personalizzare un database di origine, è necessario implementare una o più) delle interfacce seguenti di origine:
Inoltre, è necessario implementare un provider dello stesso tipo:
È necessario esportare il provider con i seguenti attributi:
NameAttribute: il nome del database di origine.
ContentTypeAttribute: il tipo di contenuto (ad esempio, “testo„ o “my code„) al quale il database di origine viene applicato.
OrderAttribute: l'ordine in cui l'origine deve essere visualizzato (rispetto ad altri database di origine).
In l ' esempio seguente vengono illustrati gli attributi di esportazione su un provider di origine di completamento.
Export(typeof(ICompletionSourceProvider))]
[Name(" Test Statement Completion Provider")]
[Order(Before = "default")]
[ContentType("text")]
internal class TestCompletionSourceProvider : ICompletionSourceProvider
Per ulteriori informazioni sull' implementazione delle origini di IntelliSense, vedere le procedure dettagliate seguenti:
procedura dettagliata: Visualizzazione delle descrizioni comandi di informazioni rapide
procedura dettagliata: Visualizzazione del supporto di firma
procedura dettagliata: Visualizzazione di completamento delle istruzioni
Implementare un controller IntelliSense
Per personalizzare un controller, è necessario implementare l'interfaccia di IIntellisenseController . Inoltre, è necessario implementare un provider del controller con i seguenti attributi:
NameAttribute: il nome del controller.
ContentTypeAttribute: il tipo di contenuto (ad esempio, “testo„ o “my code„) che il controller viene applicato.
OrderAttribute: l'ordine in cui il controller deve essere visualizzato (rispetto ad altri controller).
In l ' esempio seguente vengono illustrati gli attributi di esportazione su un provider di completamento del controller.
Export(typeof(IIntellisenseControllerProvider))]
[Name(" Test Controller Provider")]
[Order(Before = "default")]
[ContentType("text")]
internal class TestIntellisenseControllerProvider : IIntellisenseControllerProvider
Per ulteriori informazioni sull' utilizzo dei controller IntelliSense, vedere le procedure dettagliate seguenti:
procedura dettagliata: Visualizzazione delle descrizioni comandi di informazioni rapide