Esporre le proprietà al Finestra Proprietà

Questa procedura dettagliata espone le proprietà pubbliche di un oggetto alla finestra Proprietà . Le modifiche apportate a queste proprietà vengono riflesse nella finestra Proprietà .

Esporre le proprietà al Finestra Proprietà

In questa sezione viene creata una finestra degli strumenti personalizzata e vengono visualizzate le proprietà pubbliche dell'oggetto riquadro finestra associato nella finestra Proprietà .

Per esporre le proprietà al Finestra Proprietà

  1. Ogni estensione di Visual Studio inizia con un progetto di distribuzione VSIX, che conterrà gli asset di estensione. Creare un progetto VSIX di Visual Studio denominato MyObjectPropertiesExtension. È possibile trovare il modello di progetto VSIX nella finestra di dialogo Nuovo progetto cercando "vsix".

  2. Aggiungere una finestra degli strumenti aggiungendo un modello di elemento della finestra degli strumenti personalizzato denominato MyToolWindow. Nella Esplora soluzioni fare clic con il pulsante destro del mouse sul nodo del progetto e scegliere Aggiungi>nuovo elemento. Nella finestra di dialogo Aggiungi nuovo elemento passare a Visual C# Items Extensibility (Estendibilità elementi C#)>e selezionare Custom Tool Window (Finestra strumenti personalizzata). Nel campo Nome nella parte inferiore della finestra di dialogo modificare il nome del file in MyToolWindow.cs. Per altre informazioni su come creare una finestra degli strumenti personalizzata, vedere Creare un'estensione con una finestra degli strumenti.

  3. Aprire MyToolWindow.cs e aggiungere l'istruzione using seguente:

    using System.Collections;
    using System.ComponentModel;
    using Microsoft.VisualStudio.Shell.Interop;
    
  4. Aggiungere ora i campi seguenti alla MyToolWindow classe .

    private ITrackSelection trackSel;
    private SelectionContainer selContainer;
    
    
  5. Aggiungere il codice seguente alla 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 proprietà usa GetService per ottenere un STrackSelection servizio, che fornisce un'interfaccia ITrackSelection . Il gestore eventi e SelectList il OnToolWindowCreated metodo insieme creano un elenco di oggetti selezionati che contiene solo l'oggetto riquadro della finestra degli strumenti stesso. Il UpdateSelection metodo indica alla finestra Proprietà di visualizzare le proprietà pubbliche del riquadro della finestra degli strumenti.

  6. Compilare il progetto e avviare il debug. Verrà visualizzata l'istanza sperimentale di Visual Studio.

  7. Se la finestra Proprietà non è visibile, aprirla premendo F4.

  8. Aprire la finestra MyToolWindow . È possibile trovarlo in Visualizza>altre finestre.

    Viene visualizzata la finestra e le proprietà pubbliche del riquadro della finestra vengono visualizzate nella finestra Proprietà .

  9. Modificare la proprietà Caption nella finestra Proprietà in Proprietà oggetto personale.

    La finestra MyToolWindow didascalia cambia di conseguenza.

Esporre le proprietà della finestra degli strumenti

In questa sezione si aggiunge una finestra degli strumenti ed si espongono le relative proprietà. Le modifiche apportate alle proprietà vengono riflesse nella finestra Proprietà .

Per esporre le proprietà della finestra degli strumenti

  1. Aprire MyToolWindow.cs e aggiungere la proprietà booleana pubblica IsChecked alla 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;
        }
    }
    

    Questa proprietà ottiene lo stato dalla casella di controllo WPF che verrà creata in un secondo momento.

  2. Aprire MyToolWindowControl.xaml.cs e sostituire il costruttore MyToolWindowControl con il codice seguente.

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

    In questo modo è possibile MyToolWindowControl accedere al MyToolWindow riquadro.

  3. In MyToolWindow.cs modificare il MyToolWindow costruttore nel modo seguente:

    base.Content = new MyToolWindowControl(this);
    
  4. Passare alla visualizzazione progettazione di MyToolWindowControl.

  5. Eliminare il pulsante e aggiungere una casella di controllo dalla Casella degli strumenti all'angolo superiore sinistro.

  6. Aggiungere gli eventi Checked e Unchecked. Selezionare la casella di controllo nella visualizzazione struttura. Nella finestra Proprietà fare clic sul pulsante gestori eventi (in alto a destra nella finestra Proprietà). Trovare Selezionato e digitare checkbox_Checked nella casella di testo, quindi trovare Deselezionato e digitare checkbox_Unchecked nella casella di testo.

  7. Aggiungere i gestori eventi della casella di controllo:

    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. Compilare il progetto e avviare il debug.

  9. Nell'istanza sperimentale aprire la finestra MyToolWindow .

    Cercare le proprietà della finestra nella finestra Proprietà . La proprietà IsChecked viene visualizzata nella parte inferiore della finestra, sotto la categoria Proprietà personali.

  10. Selezionare la casella di controllo nella finestra MyToolWindow . IsChecked nella finestra Proprietà viene impostato su True. Deselezionare la casella di controllo nella finestra MyToolWindow . IsChecked nella finestra Proprietà cambia in False. Modificare il valore di IsChecked nella finestra Proprietà . La casella di controllo nella finestra MyToolWindow cambia in modo che corrisponda al nuovo valore.

    Nota

    Se è necessario eliminare un oggetto visualizzato nella finestra Proprietà , chiamare OnSelectChange prima con un null contenitore di selezione. Dopo aver smentito la proprietà o l'oggetto, è possibile passare a un contenitore di selezione che ha aggiornato SelectableObjects ed SelectedObjects elenchi.

Modificare gli elenchi di selezione

In questa sezione si aggiunge un elenco di selezione per una classe di proprietà di base e si usa l'interfaccia della finestra degli strumenti per scegliere l'elenco di selezione da visualizzare.

Per modificare gli elenchi di selezione

  1. Aprire MyToolWindow.cs e aggiungere una classe pubblica denominata 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. Aggiungere una SimpleObject proprietà alla MyToolWindow classe e due metodi per cambiare la selezione della finestra Proprietà tra il riquadro della finestra e l'oggetto 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. In MyToolWindowControl.cs sostituire i gestori delle caselle di controllo con queste righe di codice:

    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. Compilare il progetto e avviare il debug.

  5. Nell'istanza sperimentale aprire la finestra MyToolWindow .

  6. Selezionare la casella di controllo nella finestra MyToolWindow . Nella finestra Proprietà vengono visualizzate le proprietà dell'oggetto Simple , SomeText e ReadOnly. Deselezionare la casella di controllo. Le proprietà pubbliche della finestra vengono visualizzate nella finestra Proprietà .

    Nota

    Il nome visualizzato di SomeText è My Text.

Procedure consigliate

In questa procedura dettagliata ISelectionContainer viene implementata in modo che la raccolta di oggetti selezionabile e l'insieme di oggetti selezionati siano la stessa raccolta. Nell'elenco Visualizzatore proprietà viene visualizzato solo l'oggetto selezionato. Per un'implementazione ISelectionContainer più completa, vedi gli esempi reference.ToolWindow.

Le finestre degli strumenti di Visual Studio vengono mantenute tra le sessioni di Visual Studio. Per altre informazioni sulla persistenza dello stato della finestra degli strumenti, vedere ProvideProfileAttribute.