Compartir a través de


tutorial: Exponer propiedades en la ventana Propiedades

Este tutorial expone propiedades públicas de un objeto en la ventana de Propiedades . Los cambios realizados en estas propiedades se reflejan en la ventana de Propiedades .

Requisitos previos

Para completar este tutorial, debe instalar Visual Studio 2010 SDK.

Nota

Para obtener más información sobre el SDK de Visual Studio, vea Información general de Visual Studio que extiende.Para averiguar cómo descargar el SDK de Visual Studio, vea Centro para desarrolladores de extensibilidad de Visual Studio en el sitio web de MSDN.

Ubicaciones de la plantilla de proyecto paquete de Visual Studio

La plantilla de proyecto paquete de Visual Studio se puede encontrar en tres ubicaciones diferentes en el diálogo de Nuevo proyecto :

  1. bajo extensibilidad de Visual Basic. El idioma predeterminado del proyecto es Visual Basic.

  2. bajo extensibilidad de C#. El lenguaje predeterminado del proyecto es C#.

  3. En otra extensibilidad de los tipos de proyecto. El lenguaje predeterminado del proyecto es C++.

Exponer propiedades en la ventana Propiedades

En esta sección, creará un paquete básico de la ventana de herramientas y muestra las propiedades públicas del objeto asociado del panel de ventana en la ventana de Propiedades .

Para exponer propiedades en la ventana Propiedades

  1. Cree un proyecto denominado MyObjectPropsde paquete de Visual Studio .

    Para obtener más información sobre cómo crear un VSPackage administrado, vea tutorial: Crear un comando de menú mediante la plantilla de paquete de Visual Studio.

  2. En la página de Seleccione un lenguaje de programación , seleccione Visual c#. Puede utilizar Visual Basic para crear un paquete, pero en este tutorial se utiliza Visual c#.

  3. En la página de Opciones de selección de VSPackage , seleccione ventana de herramientas.

  4. En la página de opciones de la ventana de herramientas , cambie Nombre de la ventana a Las propiedades de objeto, y haga clic en Finalizar.

    la plantilla crea el proyecto administrado, MyObjectProps.

  5. Abra el archivo, MyToolWindow.cs, y agrega los campos siguientes a la clase de MyToolWindow .

    private ITrackSelection trackSel;
    private SelectionContainer selContainer;
    
  6. agregue el código siguiente a la clase de MyToolWindow.

        Private ReadOnly Property TrackSelection() As ITrackSelection
            Get 
                If trackSel Is Nothing Then
                    trackSel = TryCast(GetService(GetType(STrackSelection)), ITrackSelection)
                End If 
                Return trackSel
            End Get 
        End Property 
    
        Public Sub UpdateSelection()
            Dim track As ITrackSelection = TrackSelection
            If track IsNot Nothing Then
                track.OnSelectChange(DirectCast(selContainer, ISelectionContainer))
            End If 
        End Sub 
    
        Public Sub SelectList(ByVal list As ArrayList)
            selContainer = New SelectionContainer(True, False)
            selContainer.SelectableObjects = list
            selContainer.SelectedObjects = list
            UpdateSelection()
        End Sub 
    
        Public Overloads Overrides Sub OnToolWindowCreated()
            Dim listObjects As New ArrayList()
            listObjects.Add(Me)
            SelectList(listObjects)
        End Sub 
        Private checked As Boolean = False
        <Category("My Properties")> _
        <Description("MyControl properties")> _
        Public Property IsChecked() As Boolean 
            Get 
                Return IsChecked
            End Get 
            Set(ByVal value As Boolean)
                checked = value
                control.checkBox1.Checked = value
            End Set 
        End Property 
        Private sObject As Simple = Nothing 
        Public ReadOnly Property SimpleObject() As Simple
            Get 
                If sObject Is Nothing Then
                    SimpleObject = New Simple()
                End If 
                Return sObject
            End Get 
        End Property 
        Public Sub SelectSimpleList()
            Dim listObjects As New ArrayList()
            listObjects.Add(SimpleObject)
            SelectList(listObjects)
        End Sub 
    
        Public Sub SelectThisList()
            Dim listObjects As New ArrayList()
            listObjects.Add(Me)
            SelectList(listObjects)
        End Sub
    
    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 propiedad de TrackSelection utiliza GetService para obtener un servicio de STrackSelection , que proporciona una interfaz de ITrackSelection . El controlador de eventos OnToolWindowCreated y el método de SelectList juntos crean una lista de objetos seleccionados que sólo contiene el propio objeto de panel de la ventana de herramientas. El método de UpdateSelection indica a la ventana de Propiedades que muestra las propiedades públicas del panel de la ventana de herramientas.

  7. Compile e inicie el proyecto en modo de depuración presionando F5. Esto inicia Visual Studio Exp.

    Nota

    Dos versiones de Visual Studio se abrirán.

  8. Si la ventana de Propiedades no está visible, abra presionando F4.

  9. En Visual Studio Exp, en el menú de Ver , elija Otras ventanas, y haga clic en Las propiedades de objeto.

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

  10. Haga clic en Explorador de soluciones. las propiedades en la ventana de Propiedades desaparecen. Haga clic en la ventana de Las propiedades de objeto . las propiedades reaparecen.

  11. cambie la propiedad de Título en la ventana de Propiedades a algo más.

    El mi leyenda de la ventana Propiedades del objeto cambia en consecuencia.

exponer propiedades de la ventana de herramientas

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

Para exponer las propiedades de la ventana de herramientas

  1. Visual Studio próximo Exp.

  2. MyToolWindow.cs abierto, y agregue la propiedad IsChecked de public boolean a la clase de MyToolWindow.

    Private checked As Boolean = False
    <Category("My Properties")> _
    <Description("MyControl properties")> _
    Public Property IsChecked() As Boolean 
        Get 
            Return IsChecked
        End Get 
        Set(ByVal value As Boolean)
            checked = value
            control.checkBox1.Checked = value
        End Set 
    End Property
    
    [Category("My Properties")]
    [Description("MyControl properties")]
    public bool IsChecked
    {
        get {
            if (base.Content == null)  return false;
            return (bool)((MyControl) base.Content).checkBox1.IsChecked; 
        }
        set {
            ((MyControl) base.Content).checkBox1.IsChecked = value;
        }
    }
    

    Lecturas y escrituras de esta propiedad su estado directamente de la casilla de WPF que se crea en un paso posterior.

  3. En el constructor de MyToolWindow , agregue una palabra clave de this al constructor de MyControl :

    control = New MyControl(Me)
    
    base.Content = new MyControl(this);
    
  4. Abra el archivo, MyControl.xaml.cs, y reemplace el constructor utilizando el código siguiente.

    Private pane As MyToolWindow
    Public Sub New(ByVal pane As MyToolWindow)
        InitializeComponent()
        Me.pane = pane
        checkBox1.Checked = pane.IsChecked
    End Sub
    
    private MyToolWindow pane;
    public MyControl(MyToolWindow pane)
    {
        InitializeComponent();
        this.pane = pane;
        checkBox1.IsChecked = false;
    }
    

    Esto proporciona acceso de MyControl al panel de MyToolWindow .

  5. Cambie a la vista de diseño.

  6. elimine el control de botón. agregue una casilla de Cuadro de herramientas a la parte superior, esquina izquierda.

  7. Haga doble clic en la casilla.

    Esto crea el controlador de eventos de checkBox1_Checked y lo abre en el editor de código.

  8. En la ventana Propiedades, haga doble clic en el controlador de eventos checkBox1Sin activar .

    Esto crea el controlador de eventos de checkBox1_Unchecked y lo abre en el editor de código.

  9. Reemplace los controladores de eventos checkbox mediante el código siguiente.

    Private Sub checkBox1_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles checkBox1.CheckedChanged
        pane.IsChecked = checkBox1.Checked
        pane.UpdateSelection()
        If pane.IsChecked Then
            pane.SelectSimpleList()
        Else
            pane.SelectThisList()
        End If 
    End Sub
    
    private void checkBox1_Checked(object sender, RoutedEventArgs e)
    {
        pane.IsChecked = true;
        pane.UpdateSelection();
    }
    private void checkBox1_Unchecked(object sender, RoutedEventArgs e)
    {
        pane.IsChecked = false;
        pane.UpdateSelection();
    }
    
  10. Compile e inicie el proyecto en modo de depuración presionando F5. Esto inicia Visual Studio Exp.

  11. En Visual Studio Exp, en el menú de Ver , elija Otras ventanas, y haga clic en Las propiedades de objeto.

    Las propiedades públicas del panel de ventana aparecen en la ventana de Propiedades . La propiedad de IsChecked aparece bajo la categoría, mis propiedades.

  12. Haga clic en la propiedad de IsChecked .

    Descripción propiedades de MyControl aparece en la parte inferior de la ventana de Propiedades .

  13. Active la casilla en la ventana de Propiedades del objeto. cambios deIsChecked a TRUE. Desactive la casilla. cambios deIsChecked a Falso. cambie el valor de IsChecked en la ventana de Propiedades . La casilla en los mis cambios de la ventana Propiedades del objeto para que coincida con el nuevo valor.

    Nota

    Si se debe eliminar de una propiedad o un objeto mostrado en la ventana de Propiedades , llame a OnSelectChange con un contenedor de selección de null primero.Después de eliminar la propiedad u objeto, puede cambiar a un contenedor de selección que ha actualizado SelectableObjects y listas de SelectedObjects .

Cambiar listas de selección

En esta sección, agregará una lista de selección para una clase de propiedad básica y utiliza la interfaz de la ventana de herramientas para elegir qué lista de selección a mostrar.

Para cambiar listas de selección

  1. Visual Studio próximo Exp.

  2. MyToolWindow.cs abierto o MyToolWindow.vb, y agregue la clase pública, Simple, al principio del archivo, justo después del corchete de curlique de la instrucción y la apertura del espacio de nombres.

    Public Class Simple
        Private m_someText As String = ""
    
        <Category("My Properties")> _
        <Description("Simple Properties")> _
        <DisplayName("MyText")> _
        Public Property SomeText() As String 
            Get 
                Return m_someText
            End Get 
            Set(ByVal value As String)
                m_someText = value
            End Set 
        End Property
    
        <Category("My Properties")> _
        <Description("Read-only property")> _
        Public ReadOnly Property [ReadOnly]() As String 
            Get 
                Return "Hello" 
            End Get 
        End Property 
    End Class
    
    public class Simple
    {
        private string someText = "";
    
        [Category("My Properties")]
        [Description("Simple Properties")]
        [DisplayName("MyText")]
        public string SomeText
        {
            get { return someText; }
            set { someText = value; }
        }
    
        [Category("My Properties")]
        [Description("Read-only property")]
        public string ReadOnly
        {
            get { return "Hello"; }
        }
    }
    

    Un objeto de Simple tipo tiene propiedades públicas, SomeText, y ReadOnlyde la cadena.

  3. Agregue este código al final de la clase de MyToolWindow , justo después de la propiedad de IsChecked.

    Private sObject As Simple = Nothing 
    Public ReadOnly Property SimpleObject() As Simple
        Get 
            If sObject Is Nothing Then
                SimpleObject = New Simple()
            End If 
            Return sObject
        End Get 
    End Property 
    Public Sub SelectSimpleList()
        Dim listObjects As New ArrayList()
        listObjects.Add(SimpleObject)
        SelectList(listObjects)
    End Sub 
    
    Public Sub SelectThisList()
        Dim listObjects As New ArrayList()
        listObjects.Add(Me)
        SelectList(listObjects)
    End Sub
    
    public void SelectSimpleList()
    {
        ArrayList listObjects = new ArrayList();
        listObjects.Add(SimpleObject);
        SelectList(listObjects);
    }
    
    public void SelectThisList()
    {
        ArrayList listObjects = new ArrayList();
        listObjects.Add(this);
        SelectList(listObjects);
    }
    

    Esto crea la propiedad singleton, SimpleObject, y dos métodos para cambiar la selección de la ventana de Propiedades entre el panel de ventana y el objeto de Simple .

  4. MyControl.cs abierto o MyControl.vb en vista código. Reemplace los controladores de casilla con estas líneas de código:

    If pane.IsChecked Then
        pane.SelectSimpleList()
    Else
        pane.SelectThisList()
    End If
    
    private void checkBox1_Checked(object sender, RoutedEventArgs e)
    {
        pane.IsChecked = true;
        pane.SelectSimpleList();
        pane.UpdateSelection();
    }
    private void checkBox1_Unchecked(object sender, RoutedEventArgs e)
    {
        pane.IsChecked = false;
        pane.SelectThisList();
        pane.UpdateSelection();
    }
    
  5. Compile e inicie el proyecto en modo de depuración presionando F5.

    Esto inicia Visual Studio Exp.

  6. En Visual Studio Exp, en el menú de Ver , elija Otras ventanas, y haga clic en Las propiedades de objeto.

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

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

    Nota

    el nombre para mostrar de Algunos texto es mi texto.

Procedimiento recomendado

En este tutorial, se implementa ISelectionContainer de modo que la colección seleccionables de objeto y colección seleccionado del objeto son la misma colección. Sólo el objeto seleccionado en la lista del explorador de propiedades. Para obtener más la implementación completa de ISelectionContainer, vea los ejemplos de Reference.ToolWindow.

Las ventanas de herramientas de Visual Studio se conservan entre sesiones de Visual Studio. Para obtener más información sobre la persistencia el estado de la ventana de herramientas, vea ProvideProfileAttribute.

Vea también

Conceptos

Compatibilidad con el explorador de propiedades

Otros recursos

estado de VSPackage