將命令新增至方案總管工具列

本逐步解說說明如何將按鈕新增至 [方案總管] 工具列。

工具列或功能表上的任何命令在 Visual Studio 中都稱為按鈕。 按一下按鈕時,會執行命令處理常式中的程式碼。 一般而言,相關的命令會分組在一起,形成一個群組。 功能表或工具列可作為群組的容器。 優先順序決定了群組中個別命令出現在功能表或工具列上的順序。 您可以藉由控制按鈕的可見性,防止按鈕顯示在工具列或功能表上。 .vsct 檔案的 <VisibilityConstraints> 區段中所列的命令只會出現在相關聯的內容中。 可見度無法套用至群組。

如需功能表、工具列命令和 .vsct 檔案的詳細資訊,請參閱命令、功能表和工具列

注意

使用 XML 命令表 (.vsct) 檔案,而不是命令表組態 (.ctc) 檔案,來定義 VSPackage 中功能表和命令的顯示方式。 如需詳細資訊,請參閱 Visual Studio 命令表 (.Vsct) 檔案

使用功能表命令建立延伸模組

建立名為 SolutionToolbar 的 VSIX 應用程式專案。 新增名為 ToolbarButton 的功能表命令項目範本。 如需如何執行這項操作的詳細資訊,請參閱使用功能表命令建立延伸模組

將按鈕新增至方案總管工具列

本逐步解說的這個部分說明如何將按鈕新增至 [方案總管] 工具列。 按一下按鈕時,會執行回呼方法中的程式碼。

  1. ToolbarButtonPackage.vsct 檔案中,移至 <Symbols> 區段。 <GuidSymbol> 節點包含封裝範本所產生的功能表群組和命令。 將 <IDSymbol> 元素新增至此節點,以宣告要保留您命令的群組。

    <IDSymbol name="SolutionToolbarGroup" value="0x0190"/>
    
  2. <Groups> 區段中的現有群組項目之後,定義您在上一個步驟中宣告的新群組。

    <Group guid="guidToolbarButtonPackageCmdSet"
           id="SolutionToolbarGroup" priority="0xF000">
            <Parent guid="guidSHLMainMenu" id="IDM_VS_TOOL_PROJWIN"/>
          </Group>
    

    將上層 GUID:ID 配對設定為 guidSHLMainMenuIDM_VS_TOOL_PROJWIN 會將此群組放在 [方案總管] 工具列上,而設定高優先順序值會將它放在其他命令群組之後。

  3. <Buttons> 區段中,變更產生的 <Button> 項目的上層識別碼,以反映您在上一個步驟中定義的群組。 修改後的 <Button> 元素應如下所示:

    <Button guid="guidToolbarButtonPackageCmdSet" id="ToolbarButtonId" priority="0x0100" type="Button">
        <Parent guid="guidToolbarButtonPackageCmdSet" id="SolutionToolbarGroup" />
        <Icon guid="guidImages" id="bmpPicStrikethrough" />
        <Strings>
            <ButtonText>Invoke ToolbarButton</ButtonText>
        </Strings>
    </Button>
    
  4. 建置此專案並開始偵錯。 隨即出現實驗執行個體。

    [方案總管] 工具列應該會在現有按鈕右邊顯示新命令按鈕。 按鈕圖示是刪除線。

  5. 按一下新按鈕。

    應會顯示具有 ToolbarButtonPackage Inside SolutionToolbar.ToolbarButton.MenuItemCallback() 訊息的對話方塊。

控制按鈕的可見性

本逐步解說的這個部分說明如何控制工具列上按鈕的可見性。 藉由在 SolutionToolbar.vsct 檔案的 <VisibilityConstraints> 區段中將內容設定為一或多個專案,您將按鈕限制為僅在專案開啟時顯示。

若要在開啟一或多個專案時顯示按鈕

  1. ToolbarButtonPackage.vsct<Buttons> 區段中,將兩個命令旗標新增至現有的 <Button> 元素,位於 <Strings><Icons> 標記之間。

    <CommandFlag>DefaultInvisible</CommandFlag>
    <CommandFlag>DynamicVisibility</CommandFlag>
    

    必須設定 DefaultInvisibleDynamicVisibility 旗標,<VisibilityConstraints> 區段中的專案才會生效。

  2. 建立具有兩個 <VisibilityItem> 項目的 <VisibilityConstraints> 區段。 將新區段放在結束 </Commands> 標記後面。

    <VisibilityConstraints>
        <VisibilityItem guid="guidToolbarButtonPackageCmdSet"
              id="ToolbarButtonId"
              context="UICONTEXT_SolutionHasSingleProject" />
        <VisibilityItem guid="guidToolbarButtonPackageCmdSet"
              id="ToolbarButtonId"
              context="UICONTEXT_SolutionHasMultipleProjects" />
    </VisibilityConstraints>
    

    每個可見度專案都代表顯示指定按鈕的條件。 若要套用多個條件,您必須為相同的按鈕建立多個項目。

  3. 建置此專案並開始偵錯。 隨即出現實驗執行個體。

    [方案總管] 工具列不包含刪除線按鈕。

  4. 開啟任何包含專案的方案。

    刪除線按鈕會出現在現有按鈕右邊的工具列上。

  5. 按一下 [ 檔案 ] 功能表上的 [ 關閉方案]。 按鈕會從工具列消失。

    載入 VSPackage 前,按鈕的可見性由 Visual Studio 控制。 載入 VSPackage 之後,按鈕的可見性由 VSPackage 所控制。 如需詳細資訊,請參閱 MenuCommands 與 OleMenuCommands 比較