为导航栏 (托管包结构) 支持

导航栏在编辑视图顶部显示类型和成员文件的。 类型在左侧下拉列表显示,并且,成员在下拉列表右侧显示。 当用户选择某个类型时,插入符号在类型的第一行放置。 当用户选择某个成员时,插入符号在成员的定义放置。 更新下拉框反映插入符号的当前位置。

若要支持导航栏,您必须从 TypeAndMemberDropdownBars 类派生类并实现 OnSynchronizeDropdowns 方法。 当给定语言服务的代码窗口时,基础 LanguageService 类实例化 CodeWindowManager,包含表示代码窗口的 IVsCodeWindow 对象。 然后为 CodeWindowManager 对象新 IVsTextView 对象。 CreateDropDownHelper 方法获取 TypeAndMemberDropdownBars 对象。 如果返回 TypeAndMemberDropdownBars 类的实例, CodeWindowManager 调用 OnSynchronizeDropdowns 方法填充内部列表并传递给 Visual Studio 下拉栏管理器的 TypeAndMemberDropdownBars 对象。 下拉栏管理器,然后,调用 TypeAndMemberDropdownBars 对象的 SetDropdownBar 方法建立拿起两个下拉栏的 IVsDropdownBar 对象。

在插入符号移动时, OnIdle 方法调用 OnCaretMoved 方法。 基本 OnCaretMoved 方法调用。 TypeAndMemberDropdownBars 类的 OnSynchronizeDropdowns 方法更新导航栏的状态。 您通过设置此方法的 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 不会显示。

插入符号时,将在其中时,可以实现成员列表使该名称的成员粗体。 成员在的灰色也可以显示文本,指示它们不是在插入符号确定当前范围内。

启用对导航栏支持

若要启用对导航栏支持,必须设置 ProvideLanguageServiceAttribute 属性的 ShowDropdownBarOption 参数。 true。 此参数设置 ShowNavigationBar 属性。 若要支持导航栏,您必须实现在 CreateDropDownHelper 方法的 TypeAndMemberDropdownBars 对象在 LanguageService 类。

CreateDropDownHelper 方法的实现,因此,如果 ShowNavigationBar 属性设置为 true,可以返回 TypeAndMemberDropdownBars 对象。 如果不返回对象,导航栏中未显示。

显示导航栏的选项都可由用户设置,因此,将重置该控件是可能的,编辑视图处于打开状态时。 ,发生更改之前,用户必须关闭并重新打开编辑器窗口。

实现用于导航栏支持

OnSynchronizeDropdowns 方法采用两个列表 (一个下拉列表的每个),表示中的每个的两个值当前选择列表。 列表,然后选择值可以更新,因此,在 OnSynchronizeDropdowns 方法必须返回 true 指示情况下列出已更改。

当所选内容在下拉类型的更改,成员列表必须更新以反映新类型。 在哪些成员公开列表可为:

  • 成员列出当前类型的。

  • 所有可用的成员在源文件,但是,对于所有成员不是显示的当前类型在灰显的文本。 用户仍可以选择变灰成员,因此,它们可以进行快速导航使用,但是,颜色指示它们不是当前选定的类型的一部分。

OnSynchronizeDropdowns 方法的实现通常执行以下步骤:

  1. 获取当前列表源文件中

    有多种方法填充列表。 一种方法是创建在调用带有自定义的 ParseSource 方法分析导致返回所有列表的说明 LanguageService 类版本的自定义方法。 另一种方法可能将调用 ParseSource 方法直接从与该自定义的 OnSynchronizeDropdowns 方法分析原因。 第三个方法可能是缓存在 LanguageService 类的最后一个完全的分析操作返回的 AuthoringScope 类的声明和从 OnSynchronizeDropdowns 方法检索一个。

  2. 填充或更新类型的列表。

    类型列表的内容能更新,并在源更改时,或者选择更改基于当前脱字号位置的文本样式类型。 请注意此位置传递给 OnSynchronizeDropdowns 方法。

  3. 确定类型选择在类型列表基于当前脱字号位置。

    可以搜索在步骤 1 中获取查找类型中当前脱字号位置,然后搜索类型列表为该类型可以确定其索引。类型列表的说明。

  4. 填充或更新基于选定的类型的成员列表。

    成员列表反映了在下拉列表 成员 当前显示。 成员列表的内容可能需要更新,如果源已更改,或者显示选定的类型和选定的类型的成员已更改。 如果选择显示源文件的所有成员,则需要更新文本样式列表的每个成员,如果当前选定的类型已更改。

  5. 确定该成员选择在成员列表基于当前脱字号位置。

    搜索的成员中的步骤 1 中获取包含当前脱字号位置,然后搜索成员列表为该成员可以确定其索引。该成员列表的说明。

  6. 返回 true ,如果任何更改对列表或在或中选择列表。