共用方式為


逐步解說: 實作工具視窗中的快顯功能表

本逐步解說會置於工具視窗中的快顯功能表。 快顯功能表是在使用者按一下滑鼠右鍵的圖形化使用者介面 (GUI) 項目,例如按鈕、 文字方塊或視窗背景時,就會出現一個功能表。 快顯功能表上的命令的行為與其他功能表或工具列上的命令相同。 若要支援的快顯功能表,則在 XML 命令表裡 (.vsct) 檔案中指定並顯示於回應按一下滑鼠右鍵。

工具視窗所組成的自訂工具視窗類別繼承自 Windows Presentation Foundation (WPF) 使用者控制項ToolWindowPane

這個逐步解說會示範如何建立快顯功能表為 Visual Studio 的功能表中,宣告在.vsct 檔案中,功能表項目,然後使用管理套件架構來實作類別,定義 [工具] 視窗中。 這種方式幫助您 Visual Studio 的命令、 UI 項目及自動化的物件模型存取權。

或者,如果您的快顯功能表將不會存取 Visual Studio 的功能,您可以使用ContextMenu的使用者控制項中的 XAML 元素的屬性。 如需詳細資訊,請參閱 ContextMenu

必要條件

若要完成這個逐步解說中,您必須安裝Visual Studio 2010 SDK。

注意事項注意事項

如需有關 Visual Studio 的 SDK 的詳細資訊,請參閱擴充 Visual Studio 的概觀。若要了解如何下載 Visual Studio 的 SDK,請參閱Visual Studio 擴充性開發人員中心 MSDN 網站上。

Visual Studio 的封裝專案範本的位置

Visual Studio 的封裝的專案範本有三個位置都在新的專案對話方塊:

  1. Visual Basic 擴充性。 專案的預設語言是 Visual Basic。

  2. C# 擴充性。 專案的預設語言是 C#。

  3. 其他專案類型擴充性。 專案的預設語言是 c + +。

建立工具視窗快顯功能表套件

若要建立 MyTWGradientPackage VSPackage

  • 建立名為 Visual Studio 的封裝專案 TWShortcutMenu。

    1. 在套件精靈] 中,設定語言 Visual Basic 或 C#。

    2. 選取 [建立工具視窗。

    3. 命名色彩變更] 視窗中的 [工具] 視窗,並設定它的命令 ID 為 cmdidColorChange。

指定快顯功能表

如所示,在這個逐步解說可讓使用者的快顯功能表選取 [從一份用來填滿工具視窗背景的色彩。

若要建立捷徑功能表

  1. 開啟 [MyTWGradientPackage.vsct]。

  2. 的符號 項目,請在 GuidSymbol 名為"guidTWShortcutMenuCmdSet",項目可宣告快顯功能表、 快顯功能表群組和功能表選項,如下所示。

    <IDSymbol name="ColorMenu" value="0x1000"/>
    <IDSymbol name="ColorGroup" value="0x1100"/>
    <IDSymbol name="cmdidRed" value="0x102"/>
    <IDSymbol name="cmdidYellow" value="0x103"/>
    <IDSymbol name="cmdidBlue" value="0x104"/>
    
  3. 之前群組 項目,建立 功能表項目,然後定義中的 [快顯功能表。

    <Menus>
      <Menu guid="guidTWShortcutMenuCmdSet" id="ColorMenu" type="Context">
        <Strings>
          <ButtonText>Color change</ButtonText>
          <CommandName>ColorChange</CommandName>
        </Strings>
      </Menu>
    </Menus>
    

    快顯功能表沒有父代,因為它不是組件的功能表或工具列。

  4. 在Groups項目,定義群組包含快顯功能表項目,且與快顯功能表中的群組項目。

    <Group guid="guidTWShortcutMenuCmdSet" id="ColorGroup">
      <Parent guid="guidTWShortcutMenuCmdSet" id="ColorMenu"/>
    </Group>
    
  5. 按鈕項目,定義個別的命令,就會出現快顯功能表上。

    <Button guid="guidTWShortcutMenuCmdSet" id="cmdidRed" priority="1" type="Button">
      <Parent guid="guidTWShortcutMenuCmdSet" id="ColorGroup" />
      <Strings>
        <ButtonText>Red</ButtonText>
      </Strings>
    </Button>
    
    <Button guid="guidTWShortcutMenuCmdSet" id="cmdidYellow" priority="3" type="Button">
      <Parent guid="guidTWShortcutMenuCmdSet" id="ColorGroup" />
      <Strings>
        <ButtonText>Yellow</ButtonText>
      </Strings>
    </Button>
    
    <Button guid="guidTWShortcutMenuCmdSet" id="cmdidBlue" priority="5" type="Button">
      <Parent guid="guidTWShortcutMenuCmdSet" id="ColorGroup" />
      <Strings>
        <ButtonText>Blue</ButtonText>
      </Strings>
    </Button>
    
  6. 開啟 PkgCmdID.vb 或 PkgCmdID.cs。

  7. 新增快顯功能表和功能表項目定義。

    public const int ColorMenu = 0x1000;
    
    public const int cmdidRed = 0x102;
    public const int cmdidYellow = 0x103;
    public const int cmdidBlue = 0x104;
    

    這些都是相同的命令 Id 中所定義的Symbols TWShortcutMenu.vsct 檔的區段。 內容群組不包括此處因為它只需要在.vsct 檔案中。

  8. 儲存並建置方案。

實作快顯功能表

在快顯功能表和它的命令,則會實作這一節。

若要實作快顯功能表

  1. 開啟 MyToolWindow.vb 或 MyToolWindow.cs。

    MyToolWindow類別有存取功能表命令的服務,但使用者可以控制它的主機並不會。 接下來的三個步驟將示範如何讓功能表命令服務的執行個體可以從 [工具] 視窗加入使用者控制項。

  2. 加入 System.ComponentModel.Design 命名空間

    using System.ComponentModel.Design;
    
  3. 新增為用於儲存功能表命令服務的執行個體變數。

    internal OleMenuCommandService mcs;
    
  4. 建構函式結尾處加入功能表命令服務呼叫和修改呼叫base.Content、,如下所示。

    mcs = GetService(typeof(IMenuCommandService)) as OleMenuCommandService;
    base.Content = new MyControl(this);
    

    呼叫建構函式中的功能表命令服務,可確保它是在記憶體中,開啟 [工具] 視窗時。 將工具視窗的執行個體當做參數傳遞給控制項的建構函式,可讓控制項的工具視窗類別成員的呼叫。

  5. 開啟 [MyControl.xaml]。

    這個檔案表示會顯示在 [工具] 視窗中的使用者控制項。

  6. 新增MouseRightButtonDown上一層的事件UserControl項目。

    MouseRightButtonDown="MyToolWindow_MouseRightButtonDown"
    
  7. 以滑鼠右鍵按一下您剛加入的事件宣告,然後按一下 [ 巡覽至事件處理常式

    這會開啟 MyControl.xaml.vb 或 MyControl.xaml.cs,並建立事件處理常式是 stub。

  8. 在 MyControl 頂端,加入Microsoft.VisualStudio.ShellSystem.ComponentModel.Design命名空間。

    using Microsoft.VisualStudio.Shell;
    using System.ComponentModel.Design;
    
  9. 加入欄位,以保存至父] 工具視窗中,並修改建構函式,如下所示。

    MyToolWindow _parent;
    public MyControl(MyToolWindow parent)
    {
        InitializeComponent();
        _parent = parent;
    
        OleMenuCommandService mcs = this._parent.mcs;
        if (null != mcs)
        {
            // Create an alias for the command set guid.
            Guid g = GuidList.guidTWShortcutMenuCmdSet;
    
            // Create the command IDs. 
            var red = new CommandID(g, PkgCmdIDList.cmdidRed);
            var yellow = new CommandID(g, PkgCmdIDList.cmdidYellow);
            var blue = new CommandID(g, PkgCmdIDList.cmdidBlue);
    
            // Add a command for each command ID.
            mcs.AddCommand(new MenuCommand(ChangeColor, red));
            mcs.AddCommand(new MenuCommand(ChangeColor, yellow));
            mcs.AddCommand(new MenuCommand(ChangeColor, blue));
        }
    }
    

    建構函式現在會採用父工具視窗執行個體,做為參數,並將之儲存在_parent欄位。 然後會建立CommandID命令物件設定的 GUID 及PkgCmdList值,表示您在.vsct 檔案中定義的功能表指令。 最後,它會將命令加入功能表命令服務,然後將指派事件處理常式。

  10. 實作MyToolWindowMouseRightButtonDown ,如下所示的事件。

    private void MyToolWindow_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
    {
        OleMenuCommandService mcs = this._parent.mcs;
        if (null != mcs)
        {
            CommandID menuID = new CommandID(
                GuidList.guidTWShortcutMenuCmdSet,
                PkgCmdIDList.ColorMenu);
            Point p = this.PointToScreen(e.GetPosition(this));
            mcs.ShowContextMenu(menuID, (int)p.X, (int)p.Y);
        }
    }
    

    這會建立CommandID快速鍵功能表中的物件識別的位置按一下滑鼠,並在該位置開啟快顯功能表,使用ShowContextMenu方法。

  11. 實作事件,所定義的建構函式,使用者按一下功能表項目。

            private void ChangeColor(object sender, EventArgs e )
            {
                var mc = sender as MenuCommand;
    
                switch (mc.CommandID.ID)
                {
                    case PkgCmdIDList.cmdidRed:
                        MyToolWindow.Background = Brushes.Red;
                        break;
                    case PkgCmdIDList.cmdidYellow:
                        MyToolWindow.Background = Brushes.Yellow;
                        break;
                    case PkgCmdIDList.cmdidBlue:
                        MyToolWindow.Background = Brushes.Blue;
                        break;
                }
            }
    

    在此情況下,只是一種方法會處理所有功能表項目事件藉由識別CommandID ,並依此設定的背景色彩。 如果功能表項目所包含的不相關的命令,您會建立每個命令的個別事件處理常式。

測試工具視窗的功能

本章節示範如何示範在這個逐步解說已新增的功能。

若要測試工具視窗的功能

  1. 按 F5 以開啟實驗性的執行個體的Visual Studio。

  2. 在實驗性質的例子中,在檢視 ] 功能表中,按一下 其他視窗 ,然後按一下 色彩變更期間。 如此一來應該會顯示工具視窗。

  3. 以滑鼠右鍵按一下 [工具] 視窗的背景,離按鈕。 應該顯示快顯功能表具有色彩清單。

  4. 按一下快顯功能表上的色彩。 快顯功能表應該會消失,而且工具視窗的背景色彩應該變更為選取的色彩。

後續步驟

如果您可以修改.vsct 檔案,以變更快顯功能表,您必須重建 MyTWGradientPackageUI 專案。 如此一來,會強制.vsct 檔案時重新編譯,附屬 DLL 是 re-linked,您對.vsct 檔案所做的變更。

請參閱

其他資源

命令、 功能表和工具列的逐步解說

命令、 功能表和工具列

服務