procedura dettagliata: Esporre le proprietà nella Finestra Proprietà
In questa procedura dettagliata espone proprietà pubbliche di un oggetto nella finestra di Proprietà . Le modifiche apportate a queste proprietà vengono riflesse nella finestra di Proprietà .
Prerequisiti
Per completare questa procedura dettagliata, è necessario installare Visual Studio 2010 SDK.
Nota
per ulteriori informazioni su Visual Studio SDK, vedere Cenni preliminari sull'estensione di Visual Studio.Per ulteriori informazioni su come scaricare Visual Studio SDK, vedere Centro per sviluppatori di estensibilità di Visual Studio il sito Web MSDN.
Posizioni del modello di progetto del pacchetto Visual Studio
Il modello di progetto del pacchetto Visual Studio è disponibile in tre posizioni diverse nella finestra di dialogo di nuovo progetto :
Sotto di estensibilità di Visual Basic. La lingua predefinita del progetto di Visual Basic.
Sotto di estensibilità di c#. La lingua predefinita del progetto è c#.
Nell'ambito dell'altra estensibilità dei tipi di progetto. La lingua predefinita del progetto è C++.
Esporre le proprietà nella Finestra Proprietà
In questa sezione, si crea un pacchetto di base della finestra degli strumenti e visualizzare le proprietà pubbliche dell'oggetto associato al riquadro della finestra di Proprietà .
Per esporre le proprietà nella Finestra Proprietà
creare un pacchetto MyObjectPropsdenominato progetto di Visual Studio .
per ulteriori informazioni su come creare un VSPackage gestito, vedere procedura dettagliata: Creazione di un comando di menu utilizzando il modello importa pacchetto Visual Studio.
Nella pagina Selezionare un linguaggio di programmazione, impostare il linguaggio su Visual C# o Visual Basic. È possibile utilizzare Visual Basic per creare un pacchetto, ma utilizza Visual c# della procedura dettagliata.
Nella pagina di Selezionare le opzioni di package VS , Finestra degli strumentiselezionato.
Nella pagina di Opzioni della finestra degli strumenti , modificare Nome della finestra a Proprietà dell'oggetto Myquindi fare clic su - Fine.
il modello crea il progetto gestito, MyObjectProps.
Aprire il file, MyToolWindow.cs e aggiungere i campi seguenti alla classe di MyToolWindow .
private ITrackSelection trackSel; private SelectionContainer selContainer;
Aggiungere il codice seguente alla classe di 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 proprietà di TrackSelection utilizza GetService per ottenere un servizio di STrackSelection , che fornisce un'interfaccia di ITrackSelection . Il gestore eventi di OnToolWindowCreated e il metodo di SelectList creano insieme un elenco di oggetti selezionati che contiene solo l'oggetto stesso del riquadro della finestra degli strumenti. Il metodo di UpdateSelection indica alla finestra di Proprietà di visualizzare le proprietà pubbliche del riquadro della finestra degli strumenti.
Compilare e avviare il progetto in modalità di debug premendo F5. Verrà avviata Visual Studio Esp.
Nota
due versioni di Visual Studio ora sono aperte.
Se la finestra di Proprietà non è visibile, aprirlo premendo F4.
In Visual Studio Esp, scegliere dal menu di visualizzazione , il punto a altre finestrequindi fare clic su Proprietà dell'oggetto My.
Verrà aperta la finestra e le proprietà pubbliche del riquadro vengono visualizzati nella finestra di Proprietà .
Scegliere in Esplora soluzioni. Le proprietà nella finestra di Proprietà scompaiono. Fare clic sulla finestra di Proprietà dell'oggetto My . Le proprietà utilizzati più volte.
Modificare la proprietà di Barra del titolo nella finestra di Proprietà a Un altro.
La barra del titolo della Finestra Proprietà dell'oggetto My viene modificato di conseguenza.
Esporre le proprietà della finestra degli strumenti
In questa sezione, si aggiunge una finestra degli strumenti e si espongono le proprietà. Le modifiche apportate alle proprietà vengono riflesse nella finestra di Proprietà .
Per esporre le proprietà della finestra degli strumenti
Chiudere Visual Studio Esp.
Aprire MyToolWindow.cs e aggiungere la proprietà IsChecked di public boolean alla classe di 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; } }
Questa proprietà legge e scrive il relativo stato direttamente dalla casella di controllo che WPF creati in un passaggio successivo.
Nel costruttore di MyToolWindow , aggiungere una parola chiave di this al costruttore di MyControl :
control = New MyControl(Me)
base.Content = new MyControl(this);
Aprire il file, MyControl.xaml.cs e sostituire il costruttore tramite il codice seguente.
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; }
Ciò fornisce l'accesso di MyControl al riquadro di MyToolWindow .
Passare alla visualizzazione progettazione.
eliminare il pulsante. Per aggiungere una casella di controllo da Casella degli strumenti angolo superiore e sinistro.
Fare doppio clic sulla casella di controllo.
Viene creato il gestore eventi di checkBox1_Checked e aperto nell'editor di codice.
Nella Finestra Proprietà, fare doppio clic sul gestore eventi di checkBox1Non selezionato .
Viene creato il gestore eventi di checkBox1_Unchecked e aperto nell'editor di codice.
Sostituire i gestori eventi della casella di controllo tramite il codice seguente.
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(); }
Compilare e avviare il progetto in modalità di debug premendo F5. Verrà avviata Visual Studio Esp.
In Visual Studio Esp, scegliere dal menu di visualizzazione , il punto a altre finestrequindi fare clic su Proprietà dell'oggetto My.
Le proprietà pubbliche del riquadro vengono visualizzati nella finestra di Proprietà . La proprietà di IsChecked viene visualizzato sotto la categoria, Le mie proprietà.
Fare clic sulla proprietà di IsChecked .
La descrizione proprietà di MyControl verrà visualizzato nella parte inferiore della finestra di Proprietà .
Selezionare la casella di controllo nella Finestra Proprietà dell'oggetto My. modifiche diIsChecked a True. Deselezionare la casella di controllo. modifiche diIsChecked a False. Modificare il valore di IsChecked nella finestra di Proprietà . La casella di controllo nella Finestra Proprietà dell'oggetto My in base al nuovo valore.
Nota
Se è necessario disporre di una proprietà o un oggetto visualizzato nella finestra di Proprietà , chiamata OnSelectChange con un contenitore a selezione di null per primo.Dopo avere eliminato la proprietà o di un oggetto, è possibile utilizzare un contenitore a selezione che ha aggiornato SelectableObjects ed elenchi di SelectedObjects .
modificare gli elenchi di selezione
In questa sezione, aggiungere un elenco di selezione per una classe di proprietà di base e utilizzare l'interfaccia della finestra degli strumenti per scegliere quali elenco di selezione da visualizzare.
Per modificare gli elenchi di selezione
Chiudere Visual Studio Esp.
Aprire MyToolWindow.cs o MyToolWindow.vb e aggiungere la classe pubblica, Simple, all'inizio del file, subito dopo la parentesi di curlique dell'istruzione e di apertura dello spazio dei nomi.
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"; } } }
Una pagina Opzioni è specificata da due identificatori.
Aggiungere questo codice alla fine della classe di MyToolWindow , subito dopo la proprietà di 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); }
In questo modo viene creata la proprietà singletona, SimpleObjecte due metodi per cambiare la selezione della finestra di Proprietà tra il riquadro e l'oggetto di Simple .
Aprire MyControl.cs o MyControl.vb in visualizzazione codice. Sostituire i gestori della casella di controllo con queste righe di codice:
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(); }
Compilare e avviare il progetto in modalità di debug premendo F5.
Verrà avviata Visual Studio Esp.
In Visual Studio Esp, scegliere dal menu di visualizzazione , il punto a altre finestrequindi fare clic su Proprietà dell'oggetto My.
Verrà aperta la finestra e le proprietà pubbliche del riquadro vengono visualizzati nella finestra di Proprietà .
Selezionare la casella di controllo nella Finestra Proprietà dell'oggetto My. La finestra di Proprietà visualizzare le proprietà, SomeText e In sola letturadell'oggetto di Simple . Deselezionare la casella di controllo. Le proprietà pubbliche del riquadro vengono visualizzati nella finestra di Proprietà .
Nota
il nome visualizzato di Testo a è Il formato testo.
procedura consigliata
In questa procedura dettagliata, ISelectionContainer viene implementato in modo che la raccolta selezionabile dell'oggetto e la raccolta dell'oggetto sono la stessa raccolta. Solo l'oggetto selezionato verrà visualizzato nel Visualizzatore proprietà. Per un più l'implementazione completa di ISelectionContainer, vedere gli esempi di Reference.ToolWindow.
Le finestre degli strumenti di Visual Studio sono persistenti tra le sessioni di Visual Studio. Per ulteriori informazioni su come conservare lo stato della finestra degli strumenti, vedere ProvideProfileAttribute.
Vedere anche
Concetti
Il supporto di per il Visualizzatore proprietà