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 :
bajo extensibilidad de Visual Basic. El idioma predeterminado del proyecto es Visual Basic.
bajo extensibilidad de C#. El lenguaje predeterminado del proyecto es C#.
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
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.
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#.
En la página de Opciones de selección de VSPackage , seleccione ventana de herramientas.
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.
Abra el archivo, MyToolWindow.cs, y agrega los campos siguientes a la clase de MyToolWindow .
private ITrackSelection trackSel; private SelectionContainer selContainer;
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.
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.
Si la ventana de Propiedades no está visible, abra presionando F4.
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 .
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.
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
Visual Studio próximo Exp.
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.
En el constructor de MyToolWindow , agregue una palabra clave de this al constructor de MyControl :
control = New MyControl(Me)
base.Content = new MyControl(this);
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 .
Cambie a la vista de diseño.
elimine el control de botón. agregue una casilla de Cuadro de herramientas a la parte superior, esquina izquierda.
Haga doble clic en la casilla.
Esto crea el controlador de eventos de checkBox1_Checked y lo abre en el editor de código.
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.
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(); }
Compile e inicie el proyecto en modo de depuración presionando F5. Esto inicia Visual Studio Exp.
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.
Haga clic en la propiedad de IsChecked .
Descripción propiedades de MyControl aparece en la parte inferior de la ventana de Propiedades .
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
Visual Studio próximo Exp.
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.
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 .
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(); }
Compile e inicie el proyecto en modo de depuración presionando F5.
Esto inicia Visual Studio Exp.
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 .
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