Expor propriedades à janela Propriedades

Este passo a passo expõe as propriedades públicas de um objeto à 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 de painel de janela associado na janela Propriedades .

Para expor propriedades à janela 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 Novo projeto pesquisando por "vsix".

  2. Adicione uma janela de ferramenta adicionando um modelo de item de Janela de Ferramenta Personalizada chamado 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á para Extensibilidade 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 instrução using:

    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 código a seguir à classe MyToolWindow .

    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 SelectList o 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 à janela Propriedades para exibir as propriedades públicas do painel da janela de ferramentas.

  6. Compile o projeto e comece 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 é aberta e as propriedades públicas do painel da janela aparecem na janela Propriedades .

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

    A legenda da janela MyToolWindow muda de acordo.

Expor as propriedades da janela de 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 de 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;
        }
    }
    

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

  2. Abra MyToolWindowControl.xaml.cs e substitua o construtor MyToolWindowControl pelo 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. Em MyToolWindow.cs, altere o MyToolWindow construtor da seguinte maneira:

    base.Content = new MyToolWindowControl(this);
    
  4. Mude para o modo de exibição de design de 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 Verificado e Não Verificado. Marque a caixa de seleção no modo de design. Na janela Propriedades, clique no botão manipuladores de eventos (no canto superior direito da janela Propriedades). Localize Marcado e digite checkbox_Checked na caixa de texto, localize 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. Compile o projeto e comece a depuração.

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

    Procure as propriedades da 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 na janela Propriedades muda para True. 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 é alterada para corresponder ao novo valor.

    Observação

    Se você precisar descartar um objeto exibido na janela Propriedades, chame OnSelectChange com um null contêiner de seleção primeiro. Depois de descartar a propriedade ou o objeto, você pode alterar para um contêiner de seleção que tenha atualizado SelectableObjects e SelectedObjects listados.

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

    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. Em 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. Compile o projeto e comece 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 de exibição de SomeText é Meu Texto.

Melhor prática

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 da ferramenta do Visual Studio persistem entre as sessões do Visual Studio. Para obter mais informações sobre como persistir o estado da janela da ferramenta, consulte ProvideProfileAttribute.