共用方式為


製作權限。Vsct 的檔案

本文件會說明如何撰寫將功能表項目、 工具列和其他的使用者介面 (UI) 項目新增至 Visual Studio 的整合式的開發環境 (IDE) 的.vsct 檔案。 當您將 UI 項目新增至 Visual Studio 套件 (VSPackage) 未安裝.vsct 檔案,請使用這些步驟。

新的專案中,我們建議您使用的是 Visual Studio 的封裝範本,因為它會產生.vsct 檔,取決於您的選擇,已經有必要的項目功能表指令、 工具視窗,或自訂編輯器。 您可以修改這個.vsct 檔案,以符合您 VSPackage 的需求。 如需有關如何修改.vsct 檔的詳細資訊,請參閱範例命令、 功能表和工具列的逐步解說

製作檔案

在這三個階段撰寫.vsct 檔: 建立檔案和資源的結構、 宣告的 UI 項目、 將 UI 項目放在 IDE 中,並加入任何特殊的行為。

檔案結構

.Vsct 檔案的基本結構是 CommandTable 所在的根項目的命令 項目和 的符號項目。

若要建立的檔案結構

  1. 加入專案中的.vsct 檔案,依照下列步驟,在How to: 建立。Vsct 檔案

  2. 加入必要的命名空間,以CommandTable元素,如下列範例所示。

    <CommandTable xmlns="https://schemas.microsoft.com/VisualStudio/2005-10-18/CommandTable" 
        xmlns:xs="http://www.w3.org/2001/XMLSchema">
    
  3. 在CommandTable項目,加入Commands來管理所有的自訂功能表、 工具列、 命令群組,以及命令的項目。 這樣可以載入自訂的 UI 項目, Commands項目必須有其Package屬性設定為 [封裝的名稱。

    後Commands項目,加入Symbols定義的套件,以及名稱之 Guid 和 UI 項目的命令 Id 的項目。

包括 Visual Studio 資源

使用 Extern 存取定義 Visual Studio 的命令和功能表,才能將您的 UI 項目放在 IDE 中的檔案的項目。 如果您要使用您的封裝外部所定義的命令,請使用 UsedCommands 通知 Visual Studio 的項目。

若要包含 Visual Studio 資源

  1. 頂端的CommandTable項目,請加入一個Extern項目,每個外部檔案參考,並設定href屬性設定為檔案的名稱。 您可以參考下列的標頭檔,來存取 Visual Studio 資源:

    • Stdidcmd.h,定義為 Visual Studio 所公開的所有命令的 Id。

    • Vsshlids.h,包含 Visual Studio 的功能表的命令 Id。

    • Msobtnid.h,會定義其他 VSCT 的常數。 這包括標準圖示的識別碼。

  2. 如果您的封裝會呼叫 Visual Studio 或其他封裝所定義的任何指令,將UsedCommands 後的項目Commands項目。 填入與這個項目 UsedCommand 的呼叫也就不是屬於您的封裝每一個命令的項目。 設定guid和id屬性的UsedCommand的 GUID 及識別碼的值來呼叫命令的項目。 如需有關如何尋找 [Guid] 和 [Visual Studio 識別碼命令的詳細資訊,請參閱Guid 與之 Visual Studio 的命令識別碼。 若要從其他封裝呼叫指令,使用 GUID 和套件的.vsct 檔案中所定義的命令 ID。

宣告的 UI 項目

宣告所有新的 UI 項目,在Symbols .vsct 檔的區段。

若要宣告的 UI 項目

  1. 在Symbols項目,加入三個 GuidSymbol 項目。 每個GuidSymbol項目具有name屬性,並value屬性。 設定name屬性,以便可以反映出之項目的。 value屬性接受一個 GUID。 (若要在產生的 GUID, 工具 ] 功能表中,按一下 建立 GUID,綴恁寁 登錄格式。)

    第一個GuidSymbol項目代表您的封裝,且通常具有 [沒有子系。 第二個GuidSymbol命令設定,也會包含的所有符號定義您的功能表、 群組和命令的項目表示。 第三個GuidSymbol項目代表您的映像存放區,並包含所有您的命令圖示的符號。 如果您有沒有使用圖示的命令時,您可以省略第三個GuidSymbol項目。

  2. 在GuidSymbol項目,表示您的指令集加入一或多 IDSymbol 項目。 每一種代表功能表、 工具列、 群組或您要新增至 UI 的命令。

    每個IDSymbol項目,設定name屬性設定為您的名稱會用來參考對應的功能表、 群組或命令,然後設定value以十六進位的數字,表示它的命令 id 的項目。 沒有兩個IDSymbol具有相同的父代的項目可以有相同的值。

  3. 如果任何 UI 項目需要圖示時,將IDSymbol項目,每個圖示到GuidSymbol項目,表示您的映像存放區。

將 UI 項目放在 IDE 中

功能表 項目, 群組 項目,以及 按鈕項目可以包含所有的功能表、 群組和您的套件中所定義的命令定義。 將這些功能表、 群組及命令放在 IDE 中使用 項目,也就是組件的 UI 項目定義,或使用 CommandPlacement 項目,則會定義其他地方。

每個Menu, Group,以及Button項目具有guid屬性,並id屬性。 永遠設定guid屬性,以符合的名稱, GuidSymbol項目,表示您的命令設定,並設定id屬性的名稱IDSymbol項目,表示您的功能表、 群組或在命令Symbols一節。

若要定義 UI 項目

  1. 如果您要定義任何新的功能表、 子功能表、 快顯功能表或工具列,加入Menus項目Commands項目。 然後,針對要建立每個功能表,加入功能表項目Menus項目。

    設定guid和id屬性的Menu 項目,然後再將設定type屬性設定為想要的類型。 您也可以設定priority屬性,以建立父群組中的 [] 功能表中的相對位置。 如需詳細資訊,請參閱 How to: 建立功能表、 子功能表和快顯功能表How to: 在 IDE 中建立工具列

    注意事項注意事項

    priority屬性並不適用於工具列和快顯功能表。

  2. Visual Studio 的 IDE 中的所有命令必須都裝載命令群組,也就是直接的子系的功能表及工具列。 如果您要在 IDE 加入新的功能表或工具列,其中必須包含新的命令群組。 您也可以新增至現有的功能表和工具列命令群組,以便您可以以視覺化方式將群組您的命令。

    當您新增新的命令群組時,您必須先建立Groups項目,然後將它加入群組的每個命令群組的項目。

    設定guid和id屬性,每個Group 項目,然後再將設定priority屬性,以建立父功能表上的群組的相對位置。 如需詳細資訊,請參閱 How to: 建立可重複使用的按鈕群組

  3. 如果您要在 IDE 中加入新命令,將Buttons項目Commands項目。 接著,針對每個命令中,加入按鈕項目Buttons項目。

    1. 設定guid和id屬性,每個Button 項目,然後再將設定type屬性設定為想要的按鈕類型。 您也可以設定priority屬性,以建立父群組中的指令的相對位置。

      注意事項注意事項

      使用type="button"標準功能表命令和工具列上的按鈕。

    2. 在Button 項目,加入字串項目,包含項目和 CommandName 項目。 ButtonText項目會提供功能表項目或工具列按鈕的工具提示的文字標籤。 CommandName項目會提供要在命令中使用的良好的命令名稱。

    3. 如果您的命令將會有一個圖示,建立圖示中的項目Button 項目,並設定其guid和id屬性加入Bitmap圖示的項目。

      注意事項注意事項

      工具列按鈕必須要有圖示。

    如需詳細資訊,請參閱 How to: 建立和處理命令,在 VSPackages (C#)

  4. 如果所有您的命令需要圖示時,將點陣圖項目Commands項目。 然後,每個圖示,將點陣圖項目Bitmaps項目。 這是您用來指定點陣圖資源的位置。 如需詳細資訊,請參閱 How to: 將圖示新增至工具列上的命令

您可以依賴以正確地將放大部分的功能表、 群組和命令的父結構。 對於非常大型的命令集,或當功能表、 群組或命令,必須出現在多處地方,我們建議您指定命令的位置。

若要依賴將 UI 項目放置在 IDE 中的父

  • 對於一般的父建立Parent中每個項目Menu, Group,以及Command您的封裝中定義的項目。

    目標的Parent項目是功能表或群組會包含功能表、 群組或命令。

    1. 設定guid屬性設定的名稱為GuidSymbol定義命令集的項目。 如果目標項目不是套件的一部分,用於 guid 該命令的組合,對應的.vsct 檔案中所定義。

    2. 設定id屬性,使其符合id的目標] 功能表或群組的屬性。 如需的功能表和 Visual Studio 所公開的群組清單,請參閱Guid 及識別碼的 Visual Studio 功能表Guid 及識別碼 Visual Studio 的工具列

如果您有大量的 UI 項目放置在 IDE 中,或是有應該會出現在多個位置的項目,定義其位置在 CommandPlacements 元素,如下列步驟所示。

若要將 UI 項目放置在 IDE 中使用指令的位置

  1. 後Commands項目,加入CommandPlacements項目。

  2. 在CommandPlacements項目,加入CommandPlacement的每個功能表、 群組或命令將項目。

    每個CommandPlacement項目或Parent 項目會將一個功能表、 群組或命令放在同一個 IDE 的位置。 UI 項目只能有一個父項目,但它可以有多個命令的方式。 若要將 UI 項目放在多個位置中,加入CommandPlacement為每個位置的項目。

  3. 設定guid和id屬性,每個CommandPlacement項目至裝載的功能表或群組,就像您一樣, Parent項目。 您也可以設定priority屬性來建立 UI 項目的相對位置。

您可以混合位置由父和命令的位置。 不過,對於非常大型的命令集,我們建議您使用 [僅指令的位置。

加入特定的行為

您可以使用 CommandFlag ,以修改的功能表和命令,例如,若要變更其外觀和可見性的項目。 您也可能會影響命令看到時使用 VisibilityConstraints,或藉由將鍵盤快速鍵 按鍵組合。 某些類型的功能表和指令已經有專用的內建的行為。

若要新增特定的行為

  1. 若要讓 UI 項目只在特定 UI 內容,例如中的 [看得見,方案載入時,使用 [可見性的條件約束。

    1. 後Commands項目,加入VisibilityConstraints項目。

    2. 若要限制每個 UI 項目,請將 VisibilityItem 項目。

    3. 每個VisibilityItem項目,設定guid和id屬性加入功能表、 群組或命令及再將設定context屬性設定為想要的話,UI 內容中所定義UIContextGuids80類別。 如需詳細資訊,請參閱 VisibilityItem 項目

  2. 若要設定的可見度與可用性的 UI 項目在程式碼中,使用一或多個下列的命令旗標:

    • DefaultDisabled

    • DefaultInvisible

    • DynamicItemStart

    • DynamicVisibility

    • NoShowOnMenuController

    • NotInTBList

    如需詳細資訊,請參閱 CommandFlag 項目

  3. 若要變更項目顯示外觀,或以動態方式變更其外觀的方式,請使用下列一或多個下列的命令旗標:

    • AlwaysCreate

    • CommandWellOnly

    • DefaultDocked

    • DontCache

    • DynamicItemStart

    • FixMenuController

    • IconAndText

    • Pict

    • StretchHorizontally

    • TextMenuUseButton

    • 文字變更

    • TextOnly

    如需詳細資訊,請參閱 CommandFlag 項目

  4. 若要變更項目收到命令時的反應,請使用一或多個下列的命令旗標:

    • AllowParams

    • CaseSensitive

    • CommandWellOnly

    • [篩選鍵]

    • NoAutoComplete

    • NoButtonCustomize

    • NoKeyCustomize

    • NoToolbarClose

    • PostExec

    • RouteToDocs

    • TextIsAnchorCommand

    如需詳細資訊,請參閱 CommandFlag 項目

  5. 若要附加功能表相關的快速鍵功能表或功能表上的項目中,加入連字號字元 ('& ') 中ButtonText項目] 功能表或功能表項目。 在父功能表開啟時,依循連字號字元是作用中的鍵盤快速鍵。

  6. 若要附加至命令時功能表無關的快速鍵,請使用按鍵組合。 如需詳細資訊,請參閱 KeyBinding 項目

  7. 若要將當地語系化的選單文字,請使用LocCanonicalName項目。 如需詳細資訊,請參閱 Strings 項目

某些功能表和按鈕的型別包含特殊的行為。 下表說明部分特製化的功能表和按鈕的型別。 對於其他類型,請參閱types屬性中的描述Menu 項目Button 項目,以及Combo 項目

  • Combo box
    下拉式方塊是可用的工具列的下拉式清單。 若要新增下拉式方塊的 ui,建立組合中的項目Commands項目。 然後將加入至Combos項目Combo來新增每一個組合方塊的項目。 Combo項目具有相同的屬性和子系為Button項目也可能會DefaultWidth和idCommandList屬性。 DefaultWidth屬性設定為像素的寬度和idCommandList屬性用來填入下拉式方塊的命令識別碼的點。 如需詳細資訊,請參閱Combo元素文件。

  • MenuController
    功能表控制站是具有旁的箭號的按鈕。 按一下箭號可開啟清單。 若要新增功能表控制站的 ui,建立Menu項目並設定其type屬性設定為 MenuController 或 MenuControllerLatched,取決於您想要的行為。 若要填入功能表控制站,請將它設為父代Group項目。 功能表控制站將會顯示該群組的所有子系的下拉式清單上。

請參閱

概念

VSCT XML 結構描述參考

其他資源

一般工作的命令、 功能表和工具列

Visual Studio 命令表裡 (。Vsct) 檔案