共用方式為


在導覽列 (受管理的封裝架構) 的支援

導覽列上方的 [編輯器] 檢視會顯示檔案中的型別和成員。 左下拉箭號,會顯示型別和成員會顯示在右邊下拉式選單。 當使用者選取型別時,會將插入號置於第一行的型別。 當使用者選取的成員時,則會將插入號放在該成員的定義。 下拉式方塊會更新以反映目前插入號位置。

若要支援的導覽列,您必須衍生類別,以從TypeAndMemberDropdownBars類別並實作OnSynchronizeDropdowns方法。 語言服務提供程式碼] 視窗中,基底LanguageService類別會具現化CodeWindowManager,其包含了IVsCodeWindow物件,表示程式碼] 視窗。 CodeWindowManager物件然後指定一個新的IVsTextView物件。 CreateDropDownHelper方法取得TypeAndMemberDropdownBars物件。 如果要傳回的執行個體您TypeAndMemberDropdownBars類別, CodeWindowManager呼叫您OnSynchronizeDropdowns方法以填入內部清單,並傳遞您TypeAndMemberDropdownBars物件到Visual Studio下拉式選單管理員列。 下拉箭號列管理員] 中,接著呼叫SetDropdownBar上的方法您TypeAndMemberDropdownBars物件建立IVsDropdownBar會保留兩個下拉式橫條圖的物件。

當插入號移時, OnIdle方法呼叫OnCaretMoved方法。 基底OnCaretMoved方法呼叫OnSynchronizeDropdowns方法,在您TypeAndMemberDropdownBars類別來更新導覽列的狀態。 您通過一系列DropDownMember物件,這個方法。 每個物件代表下拉式選單中的項目。

導覽列內容

導覽列通常包含一份型別和成員的清單。 型別的清單包含目前的原始程式檔中的所有可用的型別。 型別名稱包含完整的命名空間資訊。 C# 兩種類型的程式碼範例如下:

namespace TestLanguagePackage
{
    public class TestLanguageService
    {
        internal struct Token
        {
            int tokenID;
        }
        private Tokens[] tokens;
        private string serviceName;
    }
}

[類型] 清單會顯示TestLanguagePackage.TestLanguageService和TestLanguagePackage.TestLanguageService.Tokens。

[成員] 清單會顯示可用的成員,在 [類型] 清單中選取的型別。 使用程式碼範例,以上, TestLanguagePackage.TestLanguageService是已選取的型別成員] 清單會包含私用成員tokens和serviceName。 內部結構Token不會顯示。

您可以實作,讓成員名稱變成粗體,當插入號會放入其中的 [成員] 清單。 成員可以也會顯示在灰色文字,指出沒有目前位置插入號的範圍內。

啟用支援在導覽列

若要啟用支援在導覽列,您必須設定ShowDropdownBarOption參數的ProvideLanguageServiceAttribute屬性設定為true。 這個參數會設定 ShowNavigationBar 屬性。 若要支援的導覽列,您必須實作TypeAndMemberDropdownBars物件在CreateDropDownHelper上的方法LanguageService類別。

在實作中的CreateDropDownHelper方法中,如果ShowNavigationBar屬性設定為 [ true,您可能會傳回TypeAndMemberDropdownBars物件。 如果您不會傳回物件,將導覽列將不會顯示。

使用者可以設定選項來顯示 [導覽列,所以有可能在編輯器檢視中開啟時,重設此控制項。 使用者必須關閉,並進行變更之前,請重新開啟 [編輯器] 視窗。

實作支援在導覽列

OnSynchronizeDropdowns方法會採用兩個清單 (一個為每個下拉式清單) 和兩個數值,代表每個清單中目前的選取範圍。 清單和選取範圍值可以更新,在此情況下OnSynchronizeDropdowns方法必須傳回true ,表示清單已經變更。

當選取範圍變更型別] 下拉式清單中時,[成員] 清單就必須更新以反映新的型別。 在 [成員] 清單中顯示的內容可以是:

  • 目前型別的成員的清單。

  • 所有可用的成員在來源檔案,但與不在目前的型別中的所有成員,以灰色文字顯示。 如此可用於快速瀏覽,但色彩表示它們不是目前所選類型的一部分,使用者仍可選取 [灰色成員。

實作OnSynchronizeDropdowns方法通常會執行下列步驟:

  1. 取得一份目前原始程式檔的宣告。

    有許多方法來填入清單。 一種方法是在您的版本中建立自訂的方法LanguageService類別時, ParseSource方法會傳回一份所有宣告自訂的剖析原因。 另一種方法可能會呼叫ParseSource方法,直接從OnSynchronizeDropdowns方法,並將自訂的剖析原因。 第三種方法可能會快取中的宣告AuthoringScope類別中的最後一個完整剖析作業所傳回的LanguageService類別,並擷取,從OnSynchronizeDropdowns方法。

  2. 填入或更新的型別清單。

    [類型] 清單的內容可能會更新來源有所變更時,或您已經選擇要變更文字樣式設定,根據目前的插入號位置的型別。 請注意,這個位置會傳遞至OnSynchronizeDropdowns方法。

  3. 決定要在目前插入號位置為基礎的 [類型] 清單中選取類型。

    您可以在步驟 1 」 以尋找型別封入目前的插入號位置,搜尋所取得的宣告,並再搜尋該型別,以判斷其索引類型] 清單中的 [類型] 清單。

  4. 填入或更新選取的型別為基礎的成員清單。

    [成員] 清單會反映出目前所顯示的成員下拉式選單。 [成員] 清單的內容可能需要更新,如果來源已經變更,或如果您要顯示所選類型的成員,且選取的型別已變更。 如果您選擇要顯示原始程式檔中的所有成員,文字樣式的清單中的每一成員需要被更新,如果目前選取的型別已經變更。

  5. 決定要在目前插入號位置為基礎的 [成員] 清單中選取的成員。

    搜尋所取得的宣告在步驟 1 中的成員,包含目前的插入號位置,然後搜尋,該成員就可以判斷它的索引至 [成員] 清單中的 [成員] 清單。

  6. 傳回true如果您未做任何變更的清單或任一個清單中選取的項目。