Share via


Exponer propiedades al ventana Propiedades

En este tutorial se exponen las propiedades públicas de un objeto a la ventana Propiedades . Los cambios realizados en estas propiedades se reflejan en la ventana Propiedades .

Exponer propiedades al ventana Propiedades

En esta sección, creará una ventana de herramientas personalizada y mostrará las propiedades públicas del objeto de panel de ventana asociado en la ventana Propiedades .

Para exponer propiedades al ventana Propiedades

  1. Cada extensión de Visual Studio comienza con un proyecto de implementación VSIX, que contendrá los recursos de extensión. Cree un proyecto VSIX de Visual Studio denominado MyObjectPropertiesExtension. Puede encontrar la plantilla de proyecto VSIX en el cuadro de diálogo Nuevo proyecto buscando "vsix".

  2. Agregue una ventana de herramientas agregando una plantilla de elemento ventana de herramientas personalizada denominada MyToolWindow. En el Explorador de soluciones, haga clic con el botón derecho en el nodo del proyecto y seleccione Agregar>Nuevo elemento. En el cuadro de diálogo Agregar nuevo elemento, vaya a Extensibilidad de elementos>de Visual C# y seleccione Ventana de herramientas personalizada. En el campo Nombre de la parte inferior del cuadro de diálogo, cambie el nombre de archivo a MyToolWindow.cs. Para obtener más información sobre cómo crear una ventana de herramientas personalizada, consulte Creación de una extensión con una ventana de herramientas.

  3. Abra MyToolWindow.cs y agregue la siguiente instrucción using:

    using System.Collections;
    using System.ComponentModel;
    using Microsoft.VisualStudio.Shell.Interop;
    
  4. Ahora agregue los campos siguientes a la MyToolWindow clase .

    private ITrackSelection trackSel;
    private SelectionContainer selContainer;
    
    
  5. Agregue el siguiente código a la clase 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 propiedad usa GetService para obtener un STrackSelection servicio, que proporciona una ITrackSelection interfaz. El OnToolWindowCreated controlador de eventos y SelectList el método crean juntos una lista de objetos seleccionados que contiene solo el propio objeto del panel de ventanas de herramientas. El UpdateSelection método indica a la ventana Propiedades que muestre las propiedades públicas del panel de la ventana de herramientas.

  6. Compile la solución y comience la depuración. Debería aparecer la instancia experimental de Visual Studio.

  7. Si la ventana Propiedades no está visible, ábrala presionando F4.

  8. Abra la ventana MyToolWindow . Puede encontrarlo en Ver>otras ventanas.

    La ventana se abre y las propiedades públicas del panel de ventana aparecen en la ventana Propiedades .

  9. Cambie la propiedad Caption en la ventana Propiedades a Mis propiedades de objeto.

    La ventana MyToolWindow subtítulo cambia en consecuencia.

Exponer propiedades de la ventana de herramientas

En esta sección, agregará una ventana de herramientas y expondá sus propiedades. Los cambios realizados en las propiedades se reflejan en la ventana Propiedades .

Para exponer las propiedades de la ventana de herramientas

  1. Abra MyToolWindow.cs y agregue la propiedad booleana pública IsChecked a la MyToolWindow clase .

    [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;
        }
    }
    

    Esta propiedad obtiene su estado de la casilla WPF que creará más adelante.

  2. Abra MyToolWindowControl.xaml.cs y reemplace el constructor MyToolWindowControl por el código siguiente.

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

    Esto proporciona MyToolWindowControl acceso al MyToolWindow panel.

  3. En MyToolWindow.cs, cambie el constructor de la MyToolWindow siguiente manera:

    base.Content = new MyToolWindowControl(this);
    
  4. Cambie a la vista de diseño de MyToolWindowControl.

  5. Elimine el botón y agregue una casilla del Cuadro de herramientas a la esquina superior izquierda.

  6. Agregue los eventos Checked y Unchecked. Active la casilla de la vista de diseño. En la ventana Propiedades , haga clic en el botón controladores de eventos (en la parte superior derecha de la ventana Propiedades ). Busque Activado y escriba checkbox_Checked en el cuadro de texto y, a continuación, busque Desmarcado y escriba checkbox_Unchecked en el cuadro de texto.

  7. Agregue los controladores de eventos de casilla:

    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. Compile la solución y comience la depuración.

  9. En la instancia experimental, abra la ventana MyToolWindow .

    Busque las propiedades de la ventana en la ventana Propiedades . La propiedad IsChecked aparece en la parte inferior de la ventana, en la categoría Mis propiedades .

  10. Active la casilla en la ventana MyToolWindow . IsChecked en la ventana Propiedades cambia a True. Desactive la casilla de la ventana MyToolWindow . IsChecked en la ventana Propiedades cambia a False. Cambie el valor de IsChecked en la ventana Propiedades . La casilla de la ventana MyToolWindow cambia para que coincida con el nuevo valor.

    Nota:

    Si debe eliminar un objeto que se muestra en la ventana Propiedades , llame primero a OnSelectChange con un null contenedor de selección. Después de eliminar la propiedad o el objeto, puede cambiar a un contenedor de selección que tenga actualizadas SelectableObjects y SelectedObjects listas.

Cambiar listas de selección

En esta sección, agregará una lista de selección para una clase de propiedad básica y usará la interfaz de ventana de herramientas para elegir la lista de selección que se va a mostrar.

Para cambiar las listas de selección

  1. Abra MyToolWindow.cs y agregue una clase pública denominada 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. Agregue una SimpleObject propiedad a la MyToolWindow clase , además de dos métodos para cambiar la selección de la ventana Propiedades entre el panel de ventana y el Simple objeto .

    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. En MyToolWindowControl.cs, reemplace los controladores de casillas por estas líneas de código:

    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. Compile la solución y comience la depuración.

  5. En la instancia experimental, abra la ventana MyToolWindow .

  6. Active la casilla en la ventana MyToolWindow . La ventana Propiedades muestra las propiedades del Simple objeto, SomeText y ReadOnly. Desactive la casilla. Las propiedades públicas de la ventana aparecen en la ventana Propiedades .

    Nota:

    El nombre para mostrar de SomeText es Mi texto.

Procedimiento recomendado

En este tutorial, ISelectionContainer se implementa para que la colección de objetos seleccionable y la colección de objetos seleccionada sean la misma colección. Solo aparece el objeto seleccionado en la lista Explorador de propiedades. Para obtener una implementación de ISelectionContainer más completa, consulte los ejemplos Reference.ToolWindow.

Las ventanas de herramientas de Visual Studio persisten entre sesiones de Visual Studio. Para obtener más información sobre cómo conservar el estado de la ventana de herramientas, vea ProvideProfileAttribute.