How to: 加入工具列的功能表控制器
具有下拉式箭號旁邊的按鈕,工具列會出現一個功能表控制器。 當使用者按一下功能表控制站時,會顯示功能表,其中包含擁有功能表控制器上一層的群組。 功能表控制站在 Visual Studio 中的兩個範例是找到 在主工具列,並在頂端的物件選取器方塊 屬性視窗。
當使用者按一下連結到功能表控制器下拉式清單中的命令時,執行命令,並命令名稱會顯示在功能表控制器的按鈕。 同樣地,若要執行命令,使用者可以只要會按按鈕。
注意事項 |
---|
雖然您可以將功能表控制站] 功能表上,我們建議您改用子功能表,因為它實作的工作變得更容易,而且是以一般使用者介面更一致。 |
功能表控制站都具有下列特性:
圖示和文字的第一個顯現的命令,在下拉式清單中會顯示在功能表控制器的按鈕上。
按一下下拉式清單中的指令時,該命令的文字與圖示會顯示在按鈕上。
可以顯示該圖示或文字的命令,或兩者。
執行相同的命令,每次按下時,您可以設定] 按鈕。 如此一來,當使用者按一下下拉式清單中的指令,會在執行,但它的名稱不會顯示在按鈕上。
若要修改這些特性,請套用定義功能表控制站所在的.vsct 檔案中的旗標。 如需詳細資訊,請參閱 Visual Studio 命令表裡 (。Vsct) 檔案。
建立功能表控制站
若要建立並新增功能表控制器
建立 VSPackage 的專案,或開啟現有的 VSPackage 專案,其中包含.vsct 檔。
在編輯器中開啟.vsct 檔案。
在區段中藉由構成Symbols 項目,找出GuidSymbol 項目包含您的功能表、 群組及指令。 預設情況下,它稱為 guid<ProjectName>CmdSet。
如下列範例所示,加入IDSymbol 項目功能表控制器,它將用來架設,每個命令和可保持命令的一或多個群組。
<IDSymbol name="TestMenuController" value="0x1300" /> <IDSymbol name="TestMenuControllerGroup" value="0x1060" /> <IDSymbol name="cmdidMCItem1" value="0x0130" /> <IDSymbol name="cmdidMCItem2" value="0x0131" /> <IDSymbol name="cmdidMCItem3" value="0x0132" />
In the Commands 項目, create a Menus Element.
在Menus項目,做為功能表中,如下所示定義功能表控制器。
設定guid和id屬性加入新的功能表控制站的 GUID:ID。
GUID:ID 配對由所構成name屬性的GuidSymbol和IDSymbol項目在功能表控制器定義中,在Symbols一節。
設定priority屬性,以決定其父群組中的 [功能表控制站位置。
設定type屬性設定為MenuController 或 MenuControllerLatched。
MenuController 值表示功能表控制器一開始會顯示第一個顯現的命令。
MenuControllerLatched 值表示功能表控制器會使用第一個顯現的命令選為最初顯示的命令。 如果未不選取任何命令,則會顯示第一個顯現的命令。
在Menu項目,建立Parent 項目 ,並設定其guid和id屬性加入的群組,將用來架設功能表控制站的 GUID:ID。 這可能是現有的 Visual Studio 群組,例如 guidStdEditor:IDG_VS_EDITTOOLBAR_COMMENT,其中包含註解 和 移除註解按鈕編輯器] 工具列上,或者它可以是使用者定義的群組。
您可以略過Parent如果使用指令的位置放置功能表控制器的項目。 若要啟用,之前Symbols區段中,建立CommandPlacements 項目。 新增CommandPlacement 項目具有功能表控制器、 優先順序及父代的 GUID:ID。
多個具有相同的 GUID:ID,但具有不同的父代中命令的定位會造成在多個位置中顯示的功能表控制站。 如需詳細資訊,請參閱 CommandPlacements 項目和 How to: 建立可重複使用的按鈕群組。
在父項目之後, 使用Strings 項目建立的區段包含了ButtonText 項目和CommandName 項目。 ButtonText項目用來在 IDE 中所顯示的樣子,設定工具列的名稱。 CommandName項目用來設定可以在中輸入命令名稱命令來存取工具列視窗。
下列範例會定義功能表控制站。
<Menu guid="guidTWToolbarCmdSet" id="TestMenuController" priority="0x0100" type="MenuController"> <Parent guid="guidTWToolbarCmdSet" id="TWToolbarGroup" /> <CommandFlag>IconAndText</CommandFlag> <CommandFlag>TextChanges</CommandFlag> <CommandFlag>TextIsAnchorCommand</CommandFlag> <Strings> <ButtonText>Test Menu Controller</ButtonText> <CommandName>Test Menu Controller</CommandName> </Strings> </Menu>
在Groups 項目,建立Group 項目到包含您想要顯示在功能表控制器的命令。
設定優先順序來決定,則會在功能表控制器上如果有多個群組的群組。
設定群組的父功能表控制站的 GUID:ID。
下列群組在前一個範例就會出現在功能表控制器上。
<Group guid="guidTWToolbarCmdSet" id="TestMenuControllerGroup" priority="0x000"> <Parent guid="guidTWToolbarCmdSet" id="TestMenuController" /> </Group>
在Buttons 項目,加入Button 項目的每個您想要新增到功能表控制站的命令。 每個命令必須指定做為其父系的群組到功能表控制站,如下列範例所示。
<Button guid="guidTWToolbarCmdSet" id="cmdidMCItem1" priority="0x0000" type="Button"> <Parent guid="guidTWToolbarCmdSet" id="TestMenuControllerGroup" /> <Icon guid="guidImages" id="bmpPic1" /> <CommandFlag>IconAndText</CommandFlag> <Strings> <ButtonText>MC Item 1</ButtonText> <CommandName>MC Item 1</CommandName> </Strings> </Button> <Button guid="guidTWToolbarCmdSet" id="cmdidMCItem2" priority="0x0100" type="Button"> <Parent guid="guidTWToolbarCmdSet" id="TestMenuControllerGroup" /> <Icon guid="guidImages" id="bmpPic2" /> <CommandFlag>IconAndText</CommandFlag> <Strings> <ButtonText>MC Item 2</ButtonText> <CommandName>MC Item 2</CommandName> </Strings> </Button> <Button guid="guidTWToolbarCmdSet" id="cmdidMCItem3" priority="0x0200" type="Button"> <Parent guid="guidTWToolbarCmdSet" id="TestMenuControllerGroup" /> <Icon guid="guidImages" id="bmpPicSearch" /> <CommandFlag>IconAndText</CommandFlag> <Strings> <ButtonText>MC Item 3</ButtonText> <CommandName>MC Item 3</CommandName> </Strings> </Button>
若要強制功能表控制站] 按鈕,以顯示相同的命令,每次按下時,設定FixMenuController上的命令旗標。
Parent命令將使用指令的位置放置可省略項目。