Passo a passo: Expor propriedades na janela de propriedades
Esta explicação passo a passo expõe as propriedades públicas de um objeto para o Propriedades janela. As alterações feitas a essas propriedades são refletidas no Propriedades janela.
Pré-requisitos
Para concluir este passo a passo, você deve instalar o SDL do Visual Studio 2010.
Dica
Para obter mais informações sobre o SDK de Visual Studio, consulte Ampliando a visão geral de Visual Studio.Para descobrir como fazer o download do SDK do Visual Studio, consulte Visual Studio extensibilidade Developer Center no site do MSDN.
Locais para o modelo de projeto de pacote de Visual Studio
O modelo de projeto do pacote de Visual Studio pode ser encontrado em três locais diferentes de Novo projeto caixa de diálogo:
Em Visual Basic extensibilidade. O idioma padrão do projeto é Visual Basic.
Em C# extensibilidade. O idioma padrão do projeto é C#.
Em outra extensibilidade de tipos de projeto. O idioma padrão do projeto é C++.
Expor propriedades na janela de propriedades
Nesta seção, você pode criar um pacote de janela de ferramenta básica e exibir as propriedades públicas do objeto do painel de janela associada no Propriedades janela.
Expor propriedades na janela de propriedades
Criar um Visual Studio o projeto do pacote chamado MyObjectProps.
Para obter mais informações sobre como criar um VSPackage gerenciado, consulte Passo a passo: Criando um comando de Menu usando o modelo de pacote de Visual Studio.
Sobre o Select a Programming Language , selecione Visual C#. Você pode usar Visual Basic para criar um pacote, mas este passo a passo usa Visual C#.
Sobre o Selecionar opções de VSPackage , selecione Janela da ferramenta.
Sobre o Opções da janela de ferramenta página, alterar o Nome da janela para Propriedades do objeto Mye, em seguida, clique em Concluir.
O modelo cria um projeto gerenciado, MyObjectProps.
Abra o arquivo, MyToolWindow.cs, e adicione os seguintes campos para o MyToolWindow classe.
private ITrackSelection trackSel; private SelectionContainer selContainer;
Adicione o seguinte código à classe 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); }
O TrackSelection propriedade usa GetService para obter um STrackSelection serviço, que fornece um ITrackSelection interface. O OnToolWindowCreated manipulador de eventos e SelectList método juntas criam uma lista de objetos selecionados que contém apenas o ferramenta janela Painel próprio objeto. O UpdateSelection método informa a Propriedades janela para exibir as propriedades públicas do painel de janela de ferramentas.
Criar e iniciar o projeto no modo de depuração pressionando F5. Isso inicia Visual Studio Exp.
Dica
Duas versões do Visual Studio agora estão abertos.
Se o Propriedades janela não estiver visível, abra-o pressionando F4.
No Visual Studio Exp diante do Exibir , aponte para Other Windowse, em seguida, clique em Propriedades do objeto My.
A janela é aberta e as propriedades públicas do painel de janela aparecerá na Propriedades janela.
Clique na Solution Explorer. As propriedades a Propriedades janela desaparecem. Clique no Propriedades do objeto My janela. As propriedades reaparecem.
Alterar o legenda propriedade no Propriedades janela para Else algo.
A legenda da janela de propriedades do meu objeto é alterada de acordo.
Expor propriedades da janela de ferramenta
Nesta seção, você pode adicionar uma janela de ferramenta e expor suas propriedades. As alterações feitas às propriedades são refletidas no Propriedades janela.
Expor propriedades da janela de ferramenta
Fechar Visual Studio Exp.
Abra MyToolWindow.cs e adicione o public boolean propriedade IsChecked para a classe 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; } }
Esta propriedade lê e grava o seu estado diretamente a partir da caixa de seleção do WPF que é criar em uma etapa posterior.
No MyToolWindow construtor, adicionar um this palavra-chave para o MyControl construtor:
control = New MyControl(Me)
base.Content = new MyControl(this);
Abra o arquivo, MyControl.xaml.cs e substitua o construtor, usando o código a seguir.
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; }
Isso permite que MyControl de acesso para o MyToolWindow painel.
Altere para o modo Design.
Exclua o controle de botão. Adicionar uma caixa de seleção do caixa de ferramentas para a superior, canto esquerdo.
Clique duas vezes na caixa de seleção.
Isso cria o checkBox1_Checked manipulador de eventos e o abre no editor de código.
Na janela Properties, clique duas vezes o checkBox1desmarcado manipulador de eventos.
Isso cria o checkBox1_Unchecked manipulador de eventos e o abre no editor de código.
Substitua os manipuladores de eventos da caixa de seleção usando o código a seguir.
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(); }
Criar e iniciar o projeto no modo de depuração pressionando F5. Isso inicia Visual Studio Exp.
No Visual Studio Exp diante do Exibir , aponte para Other Windowse, em seguida, clique em Propriedades do objeto My.
As propriedades públicas do painel da janela de constar o Propriedades janela. O IsChecked propriedade aparece na categoria, Propriedades de Meus.
Clique no IsChecked propriedade.
A descrição Propriedades MeuControle aparece na parte inferior do Propriedades janela.
Marque a caixa de seleção na janela Propriedades do objeto My. IsChecked é alterado para True. Desmarque a caixa de seleção. IsChecked é alterado para False. Alterar o valor de IsChecked na Propriedades janela. A caixa de seleção na janela Propriedades do objeto My é alterado para coincidir com o novo valor.
Dica
Se você deve dispor de uma propriedade ou objeto exibido na Propriedades janela, chamada OnSelectChange com um null contêiner de seleção primeiro.Após o descarte o objeto ou propriedade, você pode alterar para um contêiner de seleção que atualizou SelectableObjects e SelectedObjects lista.
A alteração de listas de seleção
Nesta seção, você pode adiciona uma lista de seleção para uma classe básica de propriedade e use a interface da janela de ferramenta para escolher qual lista de seleção para exibir.
Para alterar as listas de seleção
Fechar Visual Studio Exp.
Abra MyToolWindow.cs ou MyToolWindow.vb e, em seguida, adicione a classe pública, Simple, até o início do arquivo, logo após a declaração de namespace e a curlique colchete de abertura.
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"; } } }
Um objeto do tipo Simple com as propriedades públicas de seqüência de caracteres, SomeText, e ReadOnly.
Adicione este código ao final da MyToolWindow classe, logo após a propriedade 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); }
Isso cria a propriedade singleton, SimpleObjecte dois métodos para alternar a Propriedades entre o painel da janela de seleção de janela e o Simple objeto.
Abra o MyControl.cs ou MyControl.vb no modo de exibição de código. Substitua os manipuladores de caixa de seleção com estas linhas 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(); }
Criar e iniciar o projeto no modo de depuração pressionando F5.
Isso inicia Visual Studio Exp.
No Visual Studio Exp diante do Exibir , aponte para Other Windowse, em seguida, clique em Propriedades do objeto My.
A janela é aberta e as propriedades públicas do painel de janela aparecerá na Propriedades janela.
Marque a caixa de seleção na janela Propriedades do objeto My. O Propriedades janela exibe o Simple propriedades, do objeto SomeText e somente leitura. Desmarque a caixa de seleção. As propriedades públicas do painel da janela de constar o Propriedades janela.
Dica
O nome de exibição de Alguns texto é Texto da minha.
Prática recomendada
Nesta explicação, ISelectionContainer é implementado para que a coleção de objetos podem ser selecionados e a coleção de objeto selecionado são a mesma coleção. Somente o objeto selecionado aparece na lista de navegadores de propriedade. Para uma implementação de ISelectionContainer mais completa, consulte os exemplos de Reference.ToolWindow.
Janelas de ferramentas Visual Studio persistem entre sessões de Visual Studio. Para obter mais informações sobre a conservação do estado da janela de ferramenta, consulte ProvideProfileAttribute.
Consulte também
Conceitos
Suporte para o Pesquisador de propriedade