Verfügbarmachen von Eigenschaften für die Eigenschaftenfenster
In dieser exemplarischen Vorgehensweise werden die öffentlichen Eigenschaften eines Objekts für das Eigenschaftenfenster verfügbar gemacht. Die Änderungen, die Sie an diesen Eigenschaften vornehmen, werden im Eigenschaftenfenster widerzuspiegeln.
Verfügbarmachen von Eigenschaften für die Eigenschaftenfenster
In diesem Abschnitt erstellen Sie ein benutzerdefiniertes Toolfenster und zeigen die öffentlichen Eigenschaften des zugeordneten Fensterbereichsobjekts im Eigenschaftenfenster an.
So machen Sie Eigenschaften für die Eigenschaftenfenster verfügbar
Jede Visual Studio-Erweiterung beginnt mit einem VSIX-Bereitstellungsprojekt, das die Erweiterungsressourcen enthält. Erstellen Sie ein Visual Studio VSIX-Projekt mit dem Namen
MyObjectPropertiesExtension
. Sie finden die VSIX-Projektvorlage im Dialogfeld "Neues Projekt ", indem Sie nach "vsix" suchen.Fügen Sie ein Toolfenster hinzu, indem Sie eine Elementvorlage für ein benutzerdefiniertes Toolfenster mit dem Namen
MyToolWindow
hinzufügen. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektknoten, und wählen Sie Hinzufügen>Neues Element aus. Wechseln Sie im Dialogfeld "Neues Element hinzufügen" zur Erweiterbarkeit von Visual C#-Elementen>, und wählen Sie "Benutzerdefiniertes Toolfenster" aus. Ändern Sie im Feld "Name " unten im Dialogfeld den Dateinamen in "MyToolWindow.cs". Weitere Informationen zum Erstellen eines benutzerdefinierten Toolfensters finden Sie unter Erstellen einer Erweiterung mit einem Toolfenster.Öffnen Sie MyToolWindow.cs , und fügen Sie die folgende using-Anweisung hinzu:
using System.Collections; using System.ComponentModel; using Microsoft.VisualStudio.Shell.Interop;
Fügen Sie nun der Klasse die folgenden Felder hinzu
MyToolWindow
.private ITrackSelection trackSel; private SelectionContainer selContainer;
Fügen Sie der
MyToolWindow
-Klasse den folgenden Code hinzu.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); }
Die
TrackSelection
Eigenschaft verwendetGetService
, um einenSTrackSelection
Dienst abzurufen, der eine ITrackSelection Schnittstelle bereitstellt. DerOnToolWindowCreated
Ereignishandler undSelectList
die Methode erstellen zusammen eine Liste ausgewählter Objekte, die nur das Toolfensterobjekt selbst enthält. DieUpdateSelection
Methode weist das Eigenschaftenfenster an, die öffentlichen Eigenschaften des Toolfensterfensters anzuzeigen.Erstellen Sie das Projekt, und starten Sie das Debugging. Die experimentelle Instanz von Visual Studio sollte angezeigt werden.
Wenn das Eigenschaftenfenster nicht sichtbar ist, öffnen Sie es, indem Sie F4 drücken.
Öffnen Sie das Fenster "MyToolWindow ". Sie finden sie unter "Andere Fenster anzeigen>".
Das Fenster wird geöffnet, und die öffentlichen Eigenschaften des Fensterbereichs werden im Eigenschaftenfenster angezeigt.
Ändern Sie die Caption-Eigenschaft im Eigenschaftenfenster in "Meine Objekteigenschaften".
Das Fenster "MyToolWindow" Untertitel ändert sich entsprechend.
Verfügbarmachen von Toolfenstereigenschaften
In diesem Abschnitt fügen Sie ein Toolfenster hinzu und machen dessen Eigenschaften verfügbar. Die Änderungen, die Sie an Eigenschaften vornehmen, werden im Eigenschaftenfenster angezeigt.
So machen Sie Toolfenstereigenschaften verfügbar
Öffnen Sie MyToolWindow.cs, und fügen Sie der
MyToolWindow
Klasse die öffentliche boolesche Eigenschaft IsChecked hinzu.[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; } }
Diese Eigenschaft ruft ihren Status über das WPF-Kontrollkästchen ab, das Sie später erstellen.
Öffnen Sie MyToolWindowControl.xaml.cs , und ersetzen Sie den MyToolWindowControl-Konstruktor durch den folgenden Code.
private MyToolWindow pane; public MyToolWindowControl(MyToolWindow pane) { InitializeComponent(); this.pane = pane; checkBox.IsChecked = false; }
Dadurch erhalten Sie
MyToolWindowControl
Zugriff auf denMyToolWindow
Bereich.Ändern Sie in "MyToolWindow.cs" den
MyToolWindow
Konstruktor wie folgt:base.Content = new MyToolWindowControl(this);
Ändern Sie die Entwurfsansicht von MyToolWindowControl.
Löschen Sie die Schaltfläche, und fügen Sie der oberen linken Ecke ein Kontrollkästchen aus der Toolbox hinzu.
Fügen Sie die aktivierten und deaktivierten Ereignisse hinzu. Aktivieren Sie das Kontrollkästchen in der Entwurfsansicht. Klicken Sie im Eigenschaftenfenster auf die Schaltfläche "Ereignishandler" (oben rechts im Eigenschaftenfenster ). Suchen Sie "Aktiviert" , und geben Sie checkbox_Checked in das Textfeld ein, und suchen Sie dann "Deaktiviert ", und geben Sie checkbox_Unchecked in das Textfeld ein.
Fügen Sie die Ereignishandler für das Kontrollkästchen hinzu:
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(); }
Erstellen Sie das Projekt, und starten Sie das Debugging.
Öffnen Sie in der experimentellen Instanz das Fenster "MyToolWindow ".
Suchen Sie im Eigenschaftenfenster nach den Eigenschaften des Fensters. Die IsChecked-Eigenschaft wird unten im Fenster unter der Kategorie "Meine Eigenschaften " angezeigt.
Aktivieren Sie das Kontrollkästchen im MyToolWindow-Fenster . IsChecked in the Properties window changes to True. Deaktivieren Sie das Kontrollkästchen im Fenster "MyToolWindow ". IsChecked in the Properties window changes to False. Ändern Sie den Wert von IsChecked im Eigenschaftenfenster . Das Kontrollkästchen im Fenster "MyToolWindow " ändert sich entsprechend dem neuen Wert.
Hinweis
Wenn Sie ein Objekt löschen müssen, das im Eigenschaftenfenster angezeigt wird, rufen
OnSelectChange
Sie zuerst mit einemnull
Auswahlcontainer auf. Nachdem Sie die Eigenschaft oder das Objekt entfernt haben, können Sie zu einem Auswahlcontainer wechseln, der aktualisiert SelectableObjects wurde und SelectedObjects Listen enthält.
Ändern von Auswahllisten
In diesem Abschnitt fügen Sie eine Auswahlliste für eine einfache Eigenschaftsklasse hinzu und verwenden die Toolfensterschnittstelle, um auszuwählen, welche Auswahlliste angezeigt werden soll.
So ändern Sie Auswahllisten
Öffnen Sie MyToolWindow.cs , und fügen Sie eine öffentliche Klasse mit dem Namen
Simple
hinzu.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; } } }
Fügen Sie der Klasse eine
SimpleObject
Eigenschaft sowie zwei Methoden hinzu, um die Auswahl des Eigenschaftenfensters zwischen dem Fensterbereich und demSimple
Objekt zuMyToolWindow
wechseln.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); }
Ersetzen Sie in MyToolWindowControl.cs die Kontrollkästchenhandler durch die folgenden Codezeilen:
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(); }
Erstellen Sie das Projekt, und starten Sie das Debugging.
Öffnen Sie in der experimentellen Instanz das Fenster "MyToolWindow ".
Aktivieren Sie das Kontrollkästchen im MyToolWindow-Fenster . Im Eigenschaftenfenster werden die
Simple
Objekteigenschaften SomeText und ReadOnly angezeigt. Deaktivieren Sie das Kontrollkästchen. Die öffentlichen Eigenschaften des Fensters werden im Eigenschaftenfenster angezeigt.Hinweis
Der Anzeigename von SomeText ist "Mein Text".
Bewährte Vorgehensweise
In dieser exemplarischen Vorgehensweise wird implementiert, ISelectionContainer sodass die auswählbare Objektsammlung und die ausgewählte Objektsammlung dieselbe Auflistung sind. Nur das ausgewählte Objekt wird in der Eigenschaftenbrowserliste angezeigt. Eine vollständigere ISelectionContainer-Implementierung finden Sie in den Referenz.ToolWindow-Beispielen.
Visual Studio-Toolfenster werden zwischen Visual Studio-Sitzungen beibehalten. Weitere Informationen zum Beibehalten des Toolfensterzustands finden Sie unter ProvideProfileAttribute.