Compartilhar via


Expor propriedades à janela Propriedades

Este passo a passo revela as propriedades públicas de um objeto na janela Propriedades. As alterações feitas nessas propriedades são refletidas na janela Propriedades .

Expor propriedades à janela Propriedades

Nesta seção, você cria uma janela de ferramenta personalizada e exibe as propriedades públicas do objeto do painel de janela associado na janela Propriedades .

Para expor propriedades na janela de propriedades

  1. Cada extensão do Visual Studio começa com um projeto de implantação VSIX, que conterá os ativos de extensão. Crie um projeto VSIX do Visual Studio chamado MyObjectPropertiesExtension. Você pode encontrar o modelo de projeto VSIX na caixa de diálogo New Project procurando por "vsix".

  2. Para adicionar uma janela de ferramenta, utilize um modelo de item chamado Janela de Ferramenta Personalizada MyToolWindow. No Gerenciador de Soluções, clique com o botão direito do mouse no nó do projeto e selecione Adicionar>Novo Item. Na caixa de diálogo Adicionar Novo Item, vá paraExtensibilidade de Itens> do Visual C# e selecione Janela de Ferramenta Personalizada. No campo Nome na parte inferior da caixa de diálogo, altere o nome do arquivo para MyToolWindow.cs. Para obter mais informações sobre como criar uma janela de ferramenta personalizada, consulte Criar uma extensão com uma janela de ferramenta.

  3. Abra MyToolWindow.cs e adicione a seguinte "using statement":

    using System.Collections;
    using System.ComponentModel;
    using Microsoft.VisualStudio.Shell.Interop;
    
  4. Agora, adicione os seguintes campos à MyToolWindow classe.

    private ITrackSelection trackSel;
    private SelectionContainer selContainer;
    
    
  5. Adicione o seguinte código à MyToolWindow classe.

    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);
    }
    

    A TrackSelection propriedade usa GetService para obter um STrackSelection serviço, que fornece uma ITrackSelection interface. O OnToolWindowCreated manipulador de eventos e o SelectList método juntos criam uma lista de objetos selecionados que contém apenas o próprio objeto do painel da janela de ferramentas. O UpdateSelection método informa a janela Propriedades para exibir as propriedades públicas do painel da janela de ferramentas.

  6. Construa o projeto e inicie a depuração. A instância experimental do Visual Studio deve aparecer.

  7. Se a janela Propriedades não estiver visível, abra-a pressionando F4.

  8. Abra a janela MyToolWindow . Você pode encontrá-lo em Exibir>outras janelas.

    A janela abre e as propriedades públicas do painel são exibidas na janela Propriedades.

  9. Altere a propriedade Caption na janela Properties para My Object Properties.

    O título da janela MyToolWindow muda de acordo com as circunstâncias.

Expor propriedades da janela da ferramenta

Nesta seção, você adiciona uma janela de ferramenta e expõe suas propriedades. As alterações feitas nas propriedades são refletidas na janela Propriedades .

Para expor as propriedades da janela da ferramenta

  1. Abra MyToolWindow.cs e adicione a propriedade booleana pública IsChecked à MyToolWindow classe.

    [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;
        }
    }
    

    Esta propriedade obtém seu estado da caixa de seleção WPF que você criará mais tarde.

  2. Abra MyToolWindowControl.xaml.cs e substitua o construtor MyToolWindowControl com o código a seguir.

    private MyToolWindow pane;
    public MyToolWindowControl(MyToolWindow pane)
    {
        InitializeComponent();
        this.pane = pane;
        checkBox.IsChecked = false;
    }
    

    Isso dá MyToolWindowControl acesso ao MyToolWindow painel.

  3. No MyToolWindow.cs, altere o MyToolWindow construtor da seguinte maneira:

    base.Content = new MyToolWindowControl(this);
    
  4. Altere para a vista de design do MyToolWindowControl.

  5. Exclua o botão e adicione uma caixa de seleção da Caixa de Ferramentas no canto superior esquerdo.

  6. Adicione os eventos Checked e Unchecked. Marque a caixa de seleção na visualização de design. Na janela Propriedades , clique no botão manipuladores de eventos (no canto superior direito da janela Propriedades ). Encontre Marcado e digite checkbox_Checked na caixa de texto, então encontre Desmarcado e digite checkbox_Unchecked na caixa de texto.

  7. Adicione os manipuladores de eventos da caixa de seleção:

    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();
    }
    
  8. Construa o projeto e inicie a depuração.

  9. Na instância experimental, abra a janela MyToolWindow .

    Procure as propriedades de uma janela na janela Propriedades. A propriedade IsChecked aparece na parte inferior da janela, na categoria Minhas Propriedades .

  10. Marque a caixa de seleção na janela MyToolWindow . IsChecked muda para Verdadeiro na janela Propriedades. Desmarque a caixa de seleção na janela MyToolWindow . IsChecked na janela Propriedades muda para False. Altere o valor de IsChecked na janela Propriedades . A caixa de seleção na janela MyToolWindow muda para corresponder ao novo valor.

    Observação

    Se precisar eliminar um objeto exibido na janela Propriedades, chame OnSelectChange primeiro com um null contêiner de seleção. Depois de descartar a propriedade ou objeto, pode mudar para um contenedor de seleção que tenha as listas SelectableObjects e SelectedObjects atualizadas.

Alterar listas de seleção

Nesta seção, você adiciona uma lista de seleção para uma classe de propriedade básica e usa a interface da janela da ferramenta para escolher qual lista de seleção exibir.

Para alterar listas de seleção

  1. Abra MyToolWindow.cs e adicione uma classe pública chamada Simple.

    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; }
        }
    }
    
  2. Adicione uma propriedade SimpleObject à classe MyToolWindow, além de dois métodos para alternar a seleção da janela de Propriedades entre o painel da janela e o objeto Simple.

    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);
    }
    
  3. No MyToolWindowControl.cs, substitua os manipuladores de caixa de seleção por estas linhas de código:

    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();
    }
    
  4. Construa o projeto e inicie a depuração.

  5. Na instância experimental, abra a janela MyToolWindow .

  6. Marque a caixa de seleção na janela MyToolWindow . A janela Propriedades exibe as propriedades do Simple objeto, SomeText e ReadOnly. Desmarque a caixa de seleção. As propriedades públicas da janela aparecem na janela Propriedades .

    Observação

    O nome para exibição de SomeText é My Text.

Melhores práticas

Nesta explicação passo a passo, ISelectionContainer é implementado para que a coleção de objetos selecionáveis e a coleção de objetos selecionados sejam a mesma coleção. Somente o objeto selecionado aparece na lista Navegador de propriedades. Para obter uma implementação ISelectionContainer mais completa, consulte os exemplos de Reference.ToolWindow.

As janelas de ferramentas do Visual Studio persistem entre sessões do Visual Studio. Para obter mais informações sobre como persistir o estado da janela da ferramenta, consulte ProvideProfileAttribute.