2010-02-06 10 views
10

Vorrei scrivere un plug-in per Visual Studio 2010 ma in effetti devo affrontare alcuni problemi. Quello che voglio fare sembra facile, vorrei che un po 'cassetta degli attrezzi appare quando si seleziona il testo in editor di codice come in ReSharper (piccola penna con menù che aiuta a refactoring) o come qui:Scrittura di Visual Studio 2010 Plugin, vorrebbe mostrare una cassetta degli attrezzi come Resharper nell'editor di codice

http://www.axtools.com/products-vs2010-extensions.php?tab=selection-popup

I vorrebbe sapere:

  1. Esiste un modello di Visual Studio che consente di iniziare? Provo con "Editor Viewport Adornment" ma non ne sono sicuro.

  2. Devo desing iniziare dalla casella degli strumenti o posso mostrare alcuni pulsanti dalla casella degli strumenti di sistema? Nel plugin axtools dal link si tratta di un toolbox o di un sistema personalizzato?

  3. Come rilevare che è stato selezionato un testo?

Non ho altre domande per il momento. Sono piuttosto uno sviluppatore web quindi scrivere un plugin per lo studio visivo è una cosa nuova per me.

Grazie in anticipo.

risposta

4

posso rispondere a due parti di questa domanda:

  1. il modello "Editor di testo ornamento" fornito con l'SDK è un buon punto di partenza. Una volta ottenuto questo, dai un'occhiata a questo visual manager che ho scritto per una piccola dimostrazione di digitazione falsi-utenti multipli: AgentBadgeVisualManager.cs. Questo mostra come posizionare un tipo di ornamento vicino (anche se non direttamente sotto) testo. Ti consigliamo inoltre di dare un'occhiata al file ViewCreationListener.cs, che ha il AdornmentLayerDefinition per il visual manager (la cosa più importante da cambiare, dall'impostazione predefinita che ottieni con il modello di progetto, è l'attributo Order, per assicurarti che il tuo ornamento viene visualizzato in cima a qualsiasi testo).
  2. ho idea per questo, mi dispiace :(Avrai voglia questo per essere una sorta di WPF UIElement, ma passato che è davvero a te.
  3. Dal ITextView, che dovrete come una parte del IWpfTextViewCreationListener implementata come parte del campione (si passa alla AgentBadgeVisualManager), è possibile iscriversi alla manifestazione SelectionChanged in questo modo:

    view.Selection.SelectionChanged += (sender, args) => /* call methods to update your adornment here */;

    si noti che l'evento non sarà licenziato quando la selezione è vuota e segue il punto di riferimento, quindi se vuoi tener traccia di ciò, lo farai anche tu d per ascoltare gli eventi modificati dal caret. Tuttavia, se ti interessa solo a) quando la selezione non è vuota, o b) quando la selezione cambia tra vuoto e non vuoto, quell'evento sarà sufficiente.

Per ulteriori informazioni generali su estensibilità, è possibile controllare le altre estensioni che ho scritto sul mio github page, leggere su come li on my blog ho scritto, controlla la VSX samples page, o editor samples page on codeplex.