Prise en charge de la barre de navigation (managed de package)
La barre de navigation en haut de la vue de l'éditeur affiche les types et membres dans le fichier. Les types sont affichés dans la liste déroulante gauche, et les membres sont affichés dans le bon déroulant. Lorsque l'utilisateur sélectionne un type, le signe insertion est placé sur la première ligne du type. Lorsque l'utilisateur sélectionne un membre, le signe insertion est placé sur la définition du membre. Les zones déroulantes sont mises à jour pour refléter l'emplacement actuel du signe insertion.
Affichage et mise à jour la barre de navigation
Pour prendre en charge la barre de navigation, vous devez dériver une classe de la classe d' TypeAndMemberDropdownBars et implémenter la méthode d' OnSynchronizeDropdowns . Lorsque votre service de langage est fourni une fenêtre de code, la classe d' LanguageService de base instancie CodeWindowManager, qui contient l'objet d' IVsCodeWindow représentant la fenêtre de code. L'objet d' CodeWindowManager est ensuite donné un nouvel objet d' IVsTextView . la méthode d' CreateDropDownHelper obtient un objet d' TypeAndMemberDropdownBars . Si vous retournez une instance de votre classe d' TypeAndMemberDropdownBars , CodeWindowManager appelle la méthode de OnSynchronizeDropdowns pour remplir listes internes et passe votre objet d' TypeAndMemberDropdownBars au gestionnaire déroulant de barre de Visual Studio. Le gestionnaire déroulant de barre, à son tour, appelle la méthode d' SetDropdownBar sur votre objet d' TypeAndMemberDropdownBars pour générer l'objet d' IVsDropdownBarqui contient les deux barres déroulantes.
Lorsque le signe insertion se déplace, les appels de méthode d' OnIdle la méthode d' OnCaretMoved . Les appels de méthode de base pour OnCaretMoved la méthode d' OnSynchronizeDropdowns dans votre classe d' TypeAndMemberDropdownBars pour mettre à jour l'état de la barre de navigation. vous passez un ensemble d'objets d' DropDownMember à cette méthode. Chaque objet représente une entrée dans la liste déroulante.
le contenu de la barre de navigation
La barre de navigation contient généralement une liste de types et d'une liste de membres. La liste des types inclut tous les types disponibles dans le fichier source actuel. Les noms de type incluent des informations complètes sur l'espace de noms. Voici un exemple de code c# avec deux types :
namespace TestLanguagePackage
{
public class TestLanguageService
{
internal struct Token
{
int tokenID;
}
private Tokens[] tokens;
private string serviceName;
}
}
La liste des types affiche TestLanguagePackage.TestLanguageService et TestLanguagePackage.TestLanguageService.Tokens.
Liste des membres affiche les membres disponibles pour le type qui est sélectionné dans la liste de types. À l'aide de l'exemple de code ci-dessus, si TestLanguagePackage.TestLanguageService est le type qui est sélectionné, la liste des membres contient les membres privés tokens et serviceName. la structure interne Token n'est pas affichée.
Vous pouvez implémenter les membres liste pour que le nom d'un membre gras lorsque le signe insertion est placé à l'intérieur. Les membres peuvent également être affichés dans l'instant du texte, indiquant qu'ils ne sont pas dans la portée où le signe insertion est actuellement positionné.
Activer la prise en charge de la barre de navigation
Pour activer la prise en charge de la barre de navigation, vous devez définir le paramètre d' ShowDropdownBarOption de l'attribut d' ProvideLanguageServiceAttribute à true. Ce paramètre définit la propriété ShowNavigationBar. pour prendre en charge la barre de navigation, vous devez implémenter l'objet d' TypeAndMemberDropdownBars dans la méthode d' CreateDropDownHelper sur la classe d' LanguageService .
Dans votre implémentation de la méthode d' CreateDropDownHelper , si la propriété d' ShowNavigationBar est définie à true, vous pouvez retourner un objet d' TypeAndMemberDropdownBars . Si vous ne retournez pas l'objet, la barre de navigation ne s'affiche pas.
L'option pour afficher la barre de navigation peut être définie par l'utilisateur, il est possible que ce contrôle est réinitialisé alors que l'affichage de l'éditeur est ouverte. L'utilisateur doit fermer et rouvrir la fenêtre de l'éditeur avant que la modification a lieu.
Implémenter la prise en charge de la barre de navigation
la méthode d' OnSynchronizeDropdowns prend deux listes (une pour chaque déroulant) et deux valeurs représentant la sélection actuelle dans chaque liste. Les listes et les valeurs de sélection peuvent être mises à jour, auquel cas la méthode d' OnSynchronizeDropdowns doit retourner true pour indiquer que les listes ont changé.
À mesure que la sélection change dans la liste déroulante de types, la liste des membres doit être mise à jour pour refléter le nouveau type. Ce qui est affiché dans la liste des membres peut être :
La liste des membres du type actuel.
tous les membres disponibles dans le fichier source, mais avec tous les membres pas dans le type actuel affiché en texte grisé-. L'utilisateur peut toujours sélectionner les membres grisés-, de sorte qu'ils peuvent être utilisés pour la navigation rapide, mais la couleur indique qu'ils ne font pas partie du type actuellement sélectionné.
Une implémentation de la méthode de OnSynchronizeDropdowns exécute en général les étapes suivantes :
Obtenir une liste des déclarations actuelles pour le fichier source.
Il existe plusieurs façons de remplir listes. Une solution consiste à créer une méthode personnalisée sur votre version de la classe d' LanguageService qui appelle la méthode d' ParseSource avec un personnalisé analysent la raison qui retourne une liste de toutes les déclarations. Une autre approche peut être d'appeler la méthode d' ParseSource directement de la méthode d' OnSynchronizeDropdowns avec le personnalisé analysent la raison. Une troisième approche peut être de mettre en cache les déclarations dans la classe d' AuthoringScope retournée par la dernière opération d'analyse complète dans la classe d' LanguageService et de récupérer celui de la méthode d' OnSynchronizeDropdowns .
Remplissez ou mettre à jour liste de types.
Le contenu de la liste de types peut être mis à jour lorsque la source a été modifié ou si vous avez choisi de modifier le style de texte des types en fonction de l'emplacement actuel du signe insertion. Notez que cette position est passée à la méthode de OnSynchronizeDropdowns .
Déterminez le type pour sélectionner dans les types jusque en fonction de l'emplacement actuel du signe insertion.
Vous pouvez rechercher les déclarations qui ont été obtenues dans étape 1 pour rechercher le type qui englobe emplacement actuel du signe insertion, puis recherchez les types partagés sur pour que ce type détermine son index dans la liste de types.
Remplissez ou mettre à jour la liste des membres selon le type sélectionné.
La liste des membres reflète ce qui est actuellement affiché dans la liste déroulante de Membres . Le contenu de la liste des membres risque de devoir être mis à jour si la source a été modifié ou si vous affichez uniquement les membres du type sélectionné et du type sélectionné a changé. Si vous choisissez d'afficher tous les membres appartenant au fichier source, il style de texte de chaque membre dans la liste doit être mis à jour si le type actuellement sélectionné a changé.
Déterminez le membre pour sélectionner dans les membres jusque en fonction de l'emplacement actuel du signe insertion.
Recherchez les déclarations qui ont été obtenues dans étape 1 pour le membre qui contient l'emplacement actuel du signe insertion, puis recherchez les liste membres de ce membre détermine son index dans la liste des membres.
true de retour si des modifications ont été apportées aux listes ou des sélections de liste.