Procédure pas - à - pas : exposer des propriétés dans la fenêtre Propriétés
Cette procédure pas - à - pas expose les propriétés publiques d'un objet dans la fenêtre de Propriétés . Les modifications apportées à ces propriétés sont répercutées dans la fenêtre de Propriétés .
Composants requis
Pour exécuter cette procédure, vous devez installer Kit de développement logiciel Visual Studio 2010.
Notes
Pour plus d'informations sur le kit de développement Visual Studio, consultez Étendre la présentation de Visual Studio.Pour savoir comment télécharger le kit de développement Visual Studio, consultez Visual Studio Extensibility Developer Center sur le site Web MSDN.
Emplacements du modèle de projet de package Visual Studio
Le modèle de projet de package Visual Studio se trouve dans trois emplacements différents dans la boîte de dialogue Nouveau projet :
Sous l'extensibilité Visual Basic. Le langage par défaut du projet est en Visual Basic.
Sous l'extensibilité c#. Le langage par défaut du projet est c#.
Sous d'autres projets contenus l'extensibilité. Le langage par défaut du projet est en C++.
exposer des propriétés dans la fenêtre Propriétés
Dans cette section, vous créez un package de base de la fenêtre Outil et affichez les propriétés publiques de l'objet associé de volet de la fenêtre dans la fenêtre de Propriétés .
pour exposer des propriétés dans la fenêtre Propriétés
créez un package MyObjectPropsnommé par projet de Visual Studio .
Pour plus d'informations sur la création d'un VSPackage managé, consultez Procédure pas - à - pas : Créer une commande de menu à l'aide de le modèle de package Visual Studio.
Dans la page de Sélectionner un langage de programmation , sélectionnez Visual C#. Vous pouvez utiliser Visual Basic pour créer un package, mais utilise Visual c# de cette procédure pas - à - pas.
Dans la page de Sélectionnez les options d'un VSPackage , sélectionnez fenêtre Outil.
Sur la page d' options de fenêtre Outil , modifiez Nom de la fenêtre à propriétés d'objet My, puis cliquez sur Terminer.
le modèle crée le projet managé, MyObjectProps.
Ouvrez le fichier, MyToolWindow.cs, puis ajoutez les champs suivants à la classe d' MyToolWindow .
private ITrackSelection trackSel; private SelectionContainer selContainer;
Ajoutez le code suivant à la classe 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 propriété d' TrackSelection utilise GetService pour obtenir un service d' STrackSelection , qui fournit une interface d' ITrackSelection . Le gestionnaire d'événements d' OnToolWindowCreated et la méthode d' SelectList créent ensemble une liste d'objets sélectionnés qui contient uniquement l'objet de volet de la fenêtre Outil lui-même. La méthode d' UpdateSelection indique la fenêtre de Propriétés afficher les propriétés publiques du volet de la fenêtre Outil.
Générez et exécutez le projet en mode débogage en appuyant sur F5. Cette action démarre Visual Studio Exp.
Notes
deux versions de Visual Studio sont ouvertes maintenant.
si la fenêtre de Propriétés n'est pas visible, ouvrez-la en appuyant sur F4.
Dans Visual Studio Exp, dans le menu d' Afficher , pointez sur Autres fenêtres, puis cliquez sur propriétés d'objet My.
La fenêtre s'ouvre et les propriétés publiques du volet de la fenêtre s'affichent dans la fenêtre de Propriétés .
Cliquez sur dans Explorateur de solutions. les propriétés dans la fenêtre de Propriétés disparaissent. Cliquez sur la fenêtre du propriétés d'objet My . les propriétés réapparaissent.
Affectez à la propriété de légende dans la fenêtre de Propriétés à Autre élément.
Titre de la fenêtre Propriétés d'objet My change en conséquence.
Exposer des propriétés de la fenêtre Outil
Dans cette section, vous ajoutez une fenêtre Outil et à exposer ses propriétés. Les modifications apportées aux propriétés sont répercutées dans la fenêtre de Propriétés .
Pour exposer des propriétés de la fenêtre Outil
Fermez Visual Studio Exp.
ouvrez MyToolWindow.cs, et ajoutez la propriété IsChecked d' public boolean à la classe 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; } }
Cette propriété la lit et écrit son état directement de la case à cocher WPF que vous créez dans une étape ultérieure.
dans le constructeur d' MyToolWindow , ajoutez un mot clé d' this au constructeur d' MyControl :
control = New MyControl(Me)
base.Content = new MyControl(this);
Ouvrez le fichier, MyControl.xaml.cs, puis remplacez le constructeur en utilisant le code suivant.
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; }
Cela donne accès d' MyControl dans le volet d' MyToolWindow .
Modification en mode Design.
supprimez le contrôle bouton. Ajoutez une case à cocher de boîte à outils à l'angle supérieur et gauche.
Double-cliquez sur la case à cocher.
Cela crée le gestionnaire d'événements d' checkBox1_Checked et l'ouvre dans l'éditeur de code.
Dans la fenêtre Propriétés, double-cliquez sur le gestionnaire d'événements d' checkBox1Désactivé .
Cela crée le gestionnaire d'événements d' checkBox1_Unchecked et l'ouvre dans l'éditeur de code.
Remplacez les gestionnaires d'événements de la case à cocher à l'aide de le code suivant.
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(); }
Générez et exécutez le projet en mode débogage en appuyant sur F5. Cette action démarre Visual Studio Exp.
Dans Visual Studio Exp, dans le menu d' Afficher , pointez sur Autres fenêtres, puis cliquez sur propriétés d'objet My.
Les propriétés publiques du volet de la fenêtre s'affichent dans la fenêtre de Propriétés . la propriété d' IsChecked apparaît sous la catégorie, mes propriétés.
cliquez sur la propriété d' IsChecked .
la description propriétés de MyControl apparaît en bas de la fenêtre de Propriétés .
Activez la case à cocher dans la fenêtre Propriétés d'objet My. modifications d'IsChecked à True. désactivez la case à cocher. modifications d'IsChecked à False. modifiez la valeur d' IsChecked dans la fenêtre de Propriétés . La case à cocher dans la fenêtre Propriétés d'objet My change conformément à la nouvelle valeur.
Notes
Si vous devez disposer d'une propriété ou un objet affiché dans la fenêtre de Propriétés , appelez OnSelectChange avec un conteneur de sélection d' null en premier.Après avoir supprimé la propriété de l'objet ou, vous pouvez passer à un conteneur de sélection qui a mis à jour SelectableObjects et des listes d' SelectedObjects .
Modifier les listes de sélection
Dans cette section, vous ajoutez une liste de choix pour une classe de propriété de base et utilisez l'interface de fenêtre Outil pour choisir quelle liste de sélection à afficher.
Pour modifier des listes de choix
Fermez Visual Studio Exp.
Ouvrez MyToolWindow.cs ou MyToolWindow.vb, et ajoutez la classe publique, Simple, au début du fichier, juste après l'instruction de l'espace de noms et la parenthèse de curlique d'ouverture.
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 objet de type Simple possède des propriétés de type chaîne publiques, SomeText, et ReadOnly.
Ajoutez ce code à la fin de la classe d' MyToolWindow , après la propriété d'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); }
Cela crée la propriété de singleton, SimpleObject, et deux méthodes pour basculer la sélection de la fenêtre de Propriétés entre le volet de la fenêtre et l'objet d' Simple .
Ouvrez MyControl.cs ou MyControl.vb en mode Code. Remplacez les gestionnaires de case à cocher avec ces lignes de code :
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(); }
Générez et exécutez le projet en mode débogage en appuyant sur F5.
Cette action démarre Visual Studio Exp.
Dans Visual Studio Exp, dans le menu d' Afficher , pointez sur Autres fenêtres, puis cliquez sur propriétés d'objet My.
La fenêtre s'ouvre et les propriétés publiques du volet de la fenêtre s'affichent dans la fenêtre de Propriétés .
Activez la case à cocher dans la fenêtre Propriétés d'objet My. la fenêtre de Propriétés affiche les propriétés de l'objet, SomeText et en lecture seuled' Simple . désactivez la case à cocher. Les propriétés publiques du volet de la fenêtre s'affichent dans la fenêtre de Propriétés .
Notes
le nom complet de Du texte est mon texte.
recommandation
Dans cette procédure pas - à - pas, ISelectionContainer est implémenté afin que la collection sélectionnable d'objet et la collection d'objets aient la même collection. Seul l'objet sélectionné s'affiche dans la liste de l'Explorateur de propriétés. Pour un plus l'implémentation complète d'ISelectionContainer, consultez les exemples de Reference.ToolWindow.
Les fenêtres outil Visual Studio sont persistantes entre les sessions Visual Studio. Pour plus d'informations sur rendre persistant l'état de fenêtre Outil, consultez l' ProvideProfileAttribute.
Voir aussi
Concepts
Prise en charge de l'Explorateur de propriétés