Exposer les propriétés au Fenêtre Propriétés

Cette procédure pas à pas expose les propriétés publiques d’un objet à la fenêtre Propriétés . Les modifications que vous apportez à ces propriétés sont reflétées dans la fenêtre Propriétés .

Exposer les propriétés au Fenêtre Propriétés

Dans cette section, vous créez une fenêtre d’outil personnalisée et affichez les propriétés publiques de l’objet de volet de fenêtre associé dans la fenêtre Propriétés .

Pour exposer les propriétés au Fenêtre Propriétés

  1. Chaque extension Visual Studio commence par un projet de déploiement VSIX, qui contiendra les ressources d’extension. Créez un projet VSIX Visual Studio nommé MyObjectPropertiesExtension. Vous trouverez le modèle de projet VSIX dans la boîte de dialogue Nouveau projet en recherchant « vsix ».

  2. Ajoutez une fenêtre d’outil en ajoutant un modèle d’élément de fenêtre d’outil personnalisé nommé MyToolWindow. Dans le Explorateur de solutions, cliquez avec le bouton droit sur le nœud du projet, puis sélectionnez Ajouter>un nouvel élément. Dans la boîte de dialogue Ajouter un nouvel élément, accédez à l’extensibilité des éléments>Visual C# et sélectionnez Fenêtre Outil personnalisée. Dans le champ Nom en bas de la boîte de dialogue, remplacez le nom du fichier par MyToolWindow.cs. Pour plus d’informations sur la création d’une fenêtre d’outil personnalisée, consultez Créer une extension avec une fenêtre d’outil.

  3. Ouvrez MyToolWindow.cs et ajoutez l’instruction using suivante :

    using System.Collections;
    using System.ComponentModel;
    using Microsoft.VisualStudio.Shell.Interop;
    
  4. Ajoutez maintenant les champs suivants à la MyToolWindow classe.

    private ITrackSelection trackSel;
    private SelectionContainer selContainer;
    
    
  5. Ajoutez le code suivant à la classe MyToolWindow .

    private ITrackSelection TrackSelection
    {
        get
        {
            if (trackSel == null)
                trackSel =
                   GetService(typeof(STrackSelection)) as ITrackSelection;
            return trackSel;
        }
    }
    
    public void UpdateSelection()
    {
        ITrackSelection track = TrackSelection;
        if (track != null)
            track.OnSelectChange((ISelectionContainer)selContainer);
    }
    
    public void SelectList(ArrayList list)
    {
        selContainer = new SelectionContainer(true, false);
        selContainer.SelectableObjects = list;
        selContainer.SelectedObjects = list;
        UpdateSelection();
    }
    
    public override void OnToolWindowCreated()
    {
        ArrayList listObjects = new ArrayList();
        listObjects.Add(this);
        SelectList(listObjects);
    }
    

    La TrackSelection propriété utilise GetService pour obtenir un STrackSelection service, qui fournit une ITrackSelection interface. Le OnToolWindowCreated gestionnaire d’événements et SelectList la méthode créent ensemble une liste d’objets sélectionnés qui contiennent uniquement l’objet du volet d’outils lui-même. La UpdateSelection méthode indique à la fenêtre Propriétés d’afficher les propriétés publiques du volet de fenêtre d’outils.

  6. Générez le projet et commencez le débogage. L’instance expérimentale de Visual Studio doit apparaître.

  7. Si la fenêtre Propriétés n’est pas visible, ouvrez-la en appuyant sur F4.

  8. Ouvrez la fenêtre MyToolWindow . Vous pouvez le trouver dans Afficher>d’autres fenêtres.

    La fenêtre s’ouvre et les propriétés publiques du volet de fenêtre s’affichent dans la fenêtre Propriétés .

  9. Remplacez la propriété Caption dans la fenêtre Propriétés par Mes propriétés d’objet.

    La fenêtre MyToolWindow légende change en conséquence.

Exposer les propriétés de la fenêtre outil

Dans cette section, vous ajoutez une fenêtre d’outil et exposez ses propriétés. Les modifications apportées aux propriétés sont reflétées dans la fenêtre Propriétés .

Pour exposer les propriétés de la fenêtre outil

  1. Ouvrez MyToolWindow.cs et ajoutez la propriété booléenne publique IsChecked à la MyToolWindow classe.

    [Category("My Properties")]
    [Description("MyToolWindowControl properties")]
    public bool IsChecked
    {
        get {
            if (base.Content == null)  return false;
            return (bool)(( MyToolWindowControl) base.Content).checkBox.IsChecked;
        }
        set {
            ((MyToolWindowControl) base.Content).checkBox.IsChecked = value;
        }
    }
    

    Cette propriété obtient son état à partir du case activée box WPF que vous allez créer ultérieurement.

  2. Ouvrez MyToolWindowControl.xaml.cs et remplacez le constructeur MyToolWindowControl par le code suivant.

    private MyToolWindow pane;
    public MyToolWindowControl(MyToolWindow pane)
    {
        InitializeComponent();
        this.pane = pane;
        checkBox.IsChecked = false;
    }
    

    Cela donne MyToolWindowControl accès au MyToolWindow volet.

  3. Dans MyToolWindow.cs, modifiez le MyToolWindow constructeur comme suit :

    base.Content = new MyToolWindowControl(this);
    
  4. Passez à la vue de conception de MyToolWindowControl.

  5. Supprimez le bouton et ajoutez une zone case activée de la boîte à outils dans le coin supérieur gauche.

  6. Ajoutez les événements Activés et Non case activée ed. Sélectionnez la boîte de réception case activée en mode Création. Dans la fenêtre Propriétés , cliquez sur le bouton Gestionnaires d’événements (en haut à droite de la fenêtre Propriétés ). Recherchez activé et tapez case activéebox_Checked dans la zone de texte, puis recherchez Un case activée ed et tapez case activéebox_Uncase activée ed dans la zone de texte.

  7. Ajoutez les gestionnaires d’événements case activée box :

    private void checkbox_Checked(object sender, RoutedEventArgs e)
    {
        pane.IsChecked = true;
        pane.UpdateSelection();
    }
    private void checkbox_Unchecked(object sender, RoutedEventArgs e)
    {
        pane.IsChecked = false;
        pane.UpdateSelection();
    }
    
  8. Générez le projet et commencez le débogage.

  9. Dans l’instance expérimentale, ouvrez la fenêtre MyToolWindow .

    Recherchez les propriétés de la fenêtre dans la fenêtre Propriétés . La propriété IsChecked apparaît en bas de la fenêtre, sous la catégorie Mes propriétés .

  10. Cochez la case case activée dans la fenêtre MyToolWindow. IsChecked dans la fenêtre Propriétés passe à True. Désactivez la zone case activée dans la fenêtre MyToolWindow. IsChecked dans la fenêtre Propriétés passe à False. Modifiez la valeur de IsChecked dans la fenêtre Propriétés . La zone case activée dans la fenêtre MyToolWindow change pour correspondre à la nouvelle valeur.

    Remarque

    Si vous devez supprimer un objet affiché dans la fenêtre Propriétés , appelez OnSelectChange d’abord avec un null conteneur de sélection. Après la suppression de la propriété ou de l’objet, vous pouvez passer à un conteneur de sélection qui a mis à jour SelectableObjects et SelectedObjects répertorie les listes.

Modifier les listes de sélection

Dans cette section, vous ajoutez une liste de sélection pour une classe de propriété de base et utilisez l’interface de la fenêtre outil pour choisir la liste de sélection à afficher.

Pour modifier les listes de sélection

  1. Ouvrez MyToolWindow.cs et ajoutez une classe publique nommée Simple.

    public class Simple
    {
        private string someText = "";
    
        [Category("My Properties")]
        [Description("Simple Properties")]
        [DisplayName("My Text")]
        public string SomeText
        {
            get { return someText; }
            set { someText = value; }
        }
    
        [Category("My Properties")]
        [Description("Read-only property")]
        public bool ReadOnly
        {
            get { return false; }
        }
    }
    
  2. Ajoutez une SimpleObject propriété à la MyToolWindow classe, ainsi que deux méthodes pour basculer la sélection de la fenêtre Propriétés entre le volet de fenêtre et l’objet Simple .

    private Simple simpleObject = null;
    public Simple SimpleObject
    {
        get
        {
            if (simpleObject == null) simpleObject = new Simple();
            return simpleObject;
        }
    }
    
    public void SelectSimpleList()
    {
        ArrayList listObjects = new ArrayList();
        listObjects.Add(SimpleObject);
        SelectList(listObjects);
    }
    
    public void SelectThisList()
    {
        ArrayList listObjects = new ArrayList();
        listObjects.Add(this);
        SelectList(listObjects);
    }
    
  3. Dans MyToolWindowControl.cs, remplacez les gestionnaires de boîtes case activée par ces lignes de code :

    private void checkbox_Checked(object sender, RoutedEventArgs e)
     {
        pane.IsChecked = true;
        pane.SelectSimpleList();
        pane.UpdateSelection();
    }
    private void checkbox_Unchecked(object sender, RoutedEventArgs e)
    {
        pane.IsChecked = false;
        pane.SelectThisList();
        pane.UpdateSelection();
    }
    
  4. Générez le projet et commencez le débogage.

  5. Dans l’instance expérimentale, ouvrez la fenêtre MyToolWindow .

  6. Sélectionnez la zone case activée dans la fenêtre MyToolWindow. La fenêtre Propriétés affiche les propriétés de l’objet Simple , SomeText et ReadOnly. Décochez la case. Les propriétés publiques de la fenêtre s’affichent dans la fenêtre Propriétés .

    Remarque

    Le nom complet de SomeText est My Text.

Meilleure pratique

Dans cette procédure pas à pas, ISelectionContainer est implémenté afin que la collection d’objets sélectionnable et la collection d’objets sélectionnée soient la même collection. Seul l’objet sélectionné apparaît dans la liste Explorateur de propriétés. Pour obtenir une implémentation ISelectionContainer plus complète, consultez les exemples Reference.ToolWindow.

Les fenêtres de l’outil Visual Studio persistent entre les sessions Visual Studio. Pour plus d’informations sur la persistance de l’état de la fenêtre outil, consultez ProvideProfileAttribute.