將屬性公開至 [屬性] 視窗

本逐步解說會將物件的公用屬性公開至 [屬性] 視窗。 您對這些屬性所做的變更會反映在 [屬性] 視窗中。

將屬性公開至 [屬性] 視窗

在本節中,您會建立自訂工具視窗,並在 [屬性] 視窗中顯示相關聯視窗窗格物件的公用屬性。

將屬性公開至 [屬性] 視窗

  1. 每個 Visual Studio 擴充功能都是從 VSIX 部署專案開始,其中包含擴充功能資產。 建立名為 MyObjectPropertiesExtension 的 Visual Studio VSIX 專案。 您可以在 [新增專案] 對話方塊中搜尋「vsix」來尋找 VSIX 專案範本。

  2. 新增名為 MyToolWindow的自訂工具視窗項目範本,以新增工具視窗。 在 [解決方案總管] 中,以滑鼠右鍵按一下專案節點,並選取 [新增]>[新增項目]。 在 [新增項目] 對話方塊中,移至 [Visual C# 項目]>[擴充性],然後選取 [自訂工具視窗]。 在對話方塊底部的 [名稱] 欄位中,將檔案名稱變更為 MyToolWindow.cs。 如需如何建立自訂工具視窗的詳細資訊,請參閱使用工具視窗建立擴充功能

  3. 開啟 MyToolWindow.cs 並使用陳述式新增下列項目:

    using System.Collections;
    using System.ComponentModel;
    using Microsoft.VisualStudio.Shell.Interop;
    
  4. 將下列欄位新增至 MyToolWindow 類別。

    private ITrackSelection trackSel;
    private SelectionContainer selContainer;
    
    
  5. 將下列程式碼加入 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);
    }
    

    TrackSelection 屬性會使用 GetService 來取得 STrackSelection 服務,該服務可提供 ITrackSelection 介面。 OnToolWindowCreated 事件處理常式和SelectList 方法會一起建立所選物件清單,該清單只包含工具視窗窗格物件本身的選取物件。 UpdateSelection 方法會指示 [屬性] 視窗顯示工具視窗窗格的公用屬性。

  6. 建置此專案並開始偵錯。 應該會顯示 Visual Studio 實驗執行個體。

  7. 如果 [屬性] 視窗不可見,請按 F4 將其開啟。

  8. 開啟 MyToolWindow 視窗。 您可以在 [檢視]>[其他視窗] 中找到它。

    視窗隨即開啟,視窗窗格的公用屬性會出現在 [屬性] 視窗中。

  9. [屬性] 視窗中的 [標題] 屬性變更為 [我的物件屬性]

    MyToolWindow 視窗標題會依此變更。

公開工具視窗屬性

在本節中,您會新增工具視窗並公開其屬性。 您對屬性所做的變更會反映在 [屬性] 視窗中。

公開工具視窗屬性

  1. 開啟 MyToolWindow.cs,並將公用布林屬性 IsChecked 新增至 MyToolWindow 類別。

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

    此屬性會從您稍後建立的 WPF 核取方塊取得其狀態。

  2. 開啟 MyToolWindowControl.xaml.cs,並以下列程式碼取代 MyToolWindowControl 建構函式。

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

    這可讓 MyToolWindowControl 存取 MyToolWindow 窗格。

  3. MyToolWindow.cs 中,變更 MyToolWindow 建構函式,如下所示:

    base.Content = new MyToolWindowControl(this);
    
  4. 變更為 MyToolWindowControl 的設計檢視。

  5. 刪除按鈕,並將核取方塊從 [工具箱] 新增至左上角。

  6. 新增 Checked 和 Unchecked 事件。 選取設計檢視中的核取方塊。 在 [屬性] 視窗中,按兩下 [屬性] 視窗右上方的事件處理常式按鈕。 尋找 Checked 並在文字方塊中輸入 checkbox_Checked,然後尋找 Unchecked 並在文字方塊中輸入 checkbox_Unchecked

  7. 新增核取方塊事件處理常式:

    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. 建置此專案並開始偵錯。

  9. 在實驗執行個體中,開啟 MyToolWindow 視窗。

    [屬性] 視窗中尋找視窗的屬性。 IsChecked 屬性會顯示在視窗底部,顯示在 [我的屬性] 類別下。

  10. 勾選 MyToolWindow 視窗中的核取方塊。 [屬性] 視窗中的 IsChecked 會變更為 True。 清除 MyToolWindow 視窗中的核取方塊。 [屬性] 視窗中的 IsChecked 會變更為 False。 在 [屬性] 視窗中變更 IsChecked 的值。 MyToolWindow 視窗中的核取方塊會變更以符合新的值。

    注意

    如果您必須處置顯示在 [屬性] 視窗中的物件,請先使用 null 選取容器來呼叫 OnSelectChange。 處置屬性或對象之後,您可以變更為已更新 SelectableObjectsSelectedObjects 清單的選取容器。

變更選取清單

在本節中,您會新增基本屬性類別的選取清單,並使用工具視窗介面來選擇要顯示的選取清單。

變更選取清單

  1. 開啟 MyToolWindow.cs 並新增名為 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. SimpleObject 屬性新增至 MyToolWindow 類別,加上兩種方法,以在視窗窗格和 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. MyToolWindowControl.cs 中,以下列幾行程式碼取代核取方塊處理常式:

    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. 建置此專案並開始偵錯。

  5. 在實驗執行個體中,開啟 MyToolWindow 視窗。

  6. 選取 MyToolWindow 視窗中的核取方塊。 [屬性] 視窗會顯示 Simple 物件屬性、SomeTextReadOnly。 清除核取方塊。 視窗的公用屬性會出現在 [屬性] 視窗中。

    注意

    SomeText 的顯示名稱為 [我的文字]

最佳做法

在此逐步解說中, ISelectionContainer 會進行實作 ,讓可選取的物件集合和選取的物件集合是相同集合。 只有選取的物件會出現在 [屬性瀏覽器] 清單中。 如需更完整的 ISelectionContainer 實作,請參閱 Reference.ToolWindow 範例。

Visual Studio 工具視窗會持續在 Visual Studio 工作階段之間出現。 如需儲存工具視窗狀態的詳細資訊,請參閱 ProvideProfileAttribute