[プロパティ] ウィンドウにプロパティを表示する

このチュートリアルでは、オブジェクトのパブリック プロパティを [プロパティ] ウィンドウに表示します。 これらのプロパティに加えた変更は、[プロパティ] ウィンドウに反映されます。

[プロパティ] ウィンドウにプロパティを表示する

このセクションでは、カスタム ツール ウィンドウを作成し、関連付けられているウィンドウ ペイン オブジェクトのパブリック プロパティを [プロパティ] ウィンドウに表示します。

[プロパティ] ウィンドウにプロパティを表示するには

  1. すべての Visual Studio 拡張機能は、拡張機能アセットを格納する VSIX デプロイ プロジェクトから始まります。 MyObjectPropertiesExtension という名前の Visual Studio VSIX プロジェクトを作成します。 VSIX プロジェクト テンプレートは、[新しいプロジェクト] ダイアログで「vsix」と検索すると見つかります。

  2. MyToolWindow という名前のカスタム ツール ウィンドウ項目テンプレートを追加して、ツール ウィンドウを追加します。 ソリューション エクスプローラーで、プロジェクト ノードを右クリックして、[追加]>[新しい項目] の順に選択します。 [新しい項目の追加] ダイアログで、[Visual C# 項目]>[機能拡張] の順にアクセスし、[カスタム ツール ウィンドウ] を選択します。 ダイアログの下部にある [名前] フィールドで、ファイル名を MyToolWindow.cs に変更します。 カスタム ツール ウィンドウの作成方法について詳しくは、「ツールウィンドウで拡張機能を作成する」をご覧ください。

  3. MyToolWindow.cs を開いて、次の using ステートメントを追加します。

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

    これにより、MyToolWindowControlMyToolWindow ペインにアクセスできるようになります。

  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] ウィンドウのチェック ボックスが、新しい値と一致するように変更されます。

    Note

    [プロパティ] ウィンドウに表示されるオブジェクトを破棄する必要がある場合は、null 選択コンテナーを先頭にして OnSelectChange を呼び出します。 プロパティまたはオブジェクトを破棄したら、更新された SelectableObjects および SelectedObjects リストがある選択コンテナーに変更できます。

選択リストを変更する

このセクションでは、基本プロパティ クラスの選択リストを追加し、ツール ウィンドウ インターフェイスを使用して、表示する選択リストを選択します。

選択リストを変更するには

  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. MyToolWindow クラスに SimpleObject プロパティと 2 つのメソッドを追加します。これらのメソッドでは、ウィンドウ ペインと 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 オブジェクトのプロパティ ([SomeText][ReadOnly]) が表示されます。 チェック ボックスをオフにする ウィンドウのパブリック プロパティが [プロパティ] ウィンドウに表示されます。

    Note

    [SomeText] の表示名は [My Text] です。

ベスト プラクティス

このチュートリアルでは、選択可能なオブジェクト コレクションと選択されたオブジェクト コレクションが同じコレクションになるように、ISelectionContainer が実装されます。 選択されたオブジェクトのみが [プロパティ ブラウザー] の一覧に表示されます。 ISelectionContainer の実装の詳細については、Reference.ToolWindow のサンプルを参照してください。

Visual Studio のツール ウィンドウは、Visual Studio のセッション間で保持されます。 ツール ウィンドウの状態の保持の詳細については、ProvideProfileAttribute を参照してください。