2010-02-06 18 views
10

Je voudrais écrire un plugin pour Visual Studio 2010 mais en fait je suis confronté à quelques problèmes. Ce que je veux faire semble facile, je voudrais qu'une petite boîte à outils apparaît lors de la sélection du texte dans l'éditeur de code comme dans ReSharper (petit stylo avec un menu qui aide à refactoring) ou comme ici:Écrire Visual Studio 2010 Plugin, aimerait montrer une boîte à outils comme Resharper dans l'éditeur de code

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

I aimerait savoir:

  1. Y at-il un modèle Visual Studio qui aide à démarrer? J'essaye avec "Editor Viewport Adornment" mais je n'en suis pas sûr. Dois-je commencer à utiliser la boîte à outils ou est-ce que je peux afficher certains boutons de la boîte à outils du système? Dans le plugin axtools du lien, il s'agit d'une boîte à outils personnalisée ou système?

  2. Comment détecter qu'un texte a été sélectionné?

Je n'ai plus de questions pour l'instant. Je suis plutôt développeur web donc écrire un plugin studio visuel c'est une nouvelle chose pour moi.

Merci d'avance.

Répondre

4

Je peux répondre à deux parties de cette question:

  1. Le modèle « éditeur de texte Adornment » livré avec le SDK est un bon endroit pour commencer. Une fois que vous avez cela, jetez un oeil à ce gestionnaire visuel que j'ai écrit pour une petite démo fake-multiple-users-taping: AgentBadgeVisualManager.cs. Cela vous montre comment placer un type d'ornement près (mais pas directement sous) du texte. Vous aurez également besoin de jeter un oeil au fichier ViewCreationListener.cs, qui a le AdornmentLayerDefinition pour le gestionnaire visuel (la chose la plus importante à changer, de la valeur par défaut que vous obtenez avec le modèle de projet, est l'attribut Order, pour s'assurer que votre parure est affiché au-dessus de n'importe quel texte).
  2. Je ne sais pas pour celui-ci, désolé :(Vous voulez que ce soit une sorte de WPF UIElement, mais passé qu'il est vraiment à vous.
  3. D'un ITextView, que vous avez comme une partie de la IWpfTextViewCreationListener mis en œuvre dans le cadre de l'échantillon (il est passé à la AgentBadgeVisualManager), vous pouvez vous abonner à l'événement SelectionChanged comme ceci:

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

    Notez que l'événement ne sera pas déclenché lorsque la sélection est vide et suit le signe d'insertion, donc si vous voulez suivre cela, vous devrez également d écouter les événements modifiés par le curseur. Cependant, si vous vous souciez uniquement de a) lorsque la sélection est non vide, ou b) lorsque la sélection change entre vide et non vide, cet événement sera suffisant.

Pour des informations plus générales sur l'extensibilité, vous pouvez consulter les autres extensions que j'ai écrit sur mon github page, lire sur la façon dont je les ai écrites on my blog, consultez la VSX samples page, ou editor samples page on codeplex.