VSPackage 声明其菜单项,并且其默认状态通过 Visual Studio 命令表 (.vsct) 文件。 Visual Studio 集成 (IDE)开发环境将显示在其默认状态的菜单项,直到 VSPackage 加载。 随后, QueryStatus 方法调用启用或禁用菜单项。
VSPackage 中设置注册表项,以便 VSPackage 可以基于命令用户界面上下文自动加载, (UI)不过,源代码管理 VSPackage 通常应以便按需加载而不是切换到特定 UI 上下文。 有关 AutoLoadPackages 注册表项的更多信息,请参见 加载 Vspackage。
VSPackage UI
源代码管理包实现为 VSPackage,而不使用从 Visual Studio的任何 UI。 每个源代码管理 VSPackage 必须为设置选项来指定自己的用户界面元素 (如菜单项、菜单组、工具窗口、工具栏和所有必需的 UI 特定于源代码管理 VSPackage。 这些 UI 元素可以静态或动态启用。 静态 UI 元素在 .vsct 文件中定义并显示是否 VSPackage 加载。 动态 UI 元素可能可见的基于特定命令 UI 上下文,例如 vsContextNoSolution,或者由于调用 QueryStatus 方法。 动态 UI 元素的可见性符合延迟加载的方法 Vspackage。
在源代码管理 Vspackage 的 UI 约束
由于源代码管理 VSPackage 无法从 IDE 已取消,则将加载后, VSPackage 必须能够访问非活动状态。 在 VSPackage 收到通知时它不再处于活动状态, VSPackage 禁用自己的 UI 并忽略任何外部 IDE 交互。 ,在 VSPackage 不活动时, QueryStatus 方法的 VSPackage 的实现应隐藏命令。
每个源代码管理 VSPackage 必须实现 IVsSccProvider 接口。 必须由 VSPackage 实现接口中的两个方法, SetActive 和 SetInactive,。
源代码管理 VSPackage 可以订阅各种 IDE 事件,由 IVsSolutionEvents3, IVsTrackProjectDocumentsEvents2实现,依此类推。 此外, VSPackage 中实现的注册表值启用回调接口,如 IVsSolutionPersistence。 必须全部忽略这些,当非活动。
下面的列表接口由源代码管理影响 VSPackage 的活动状态的显示:
跟踪项目文档事件。
解决方案事件。
解决方案持久性接口。 当非活动,包不应写入 .sln 和 .suo 文件。
属性扩展。
,在源代码管理 VSPackage 处于非活动状态时,所需的 IVsQueryEditQuerySave2 和 IVsSccManager2和所有可选接口与源代码管理,不会调用。
当 Visual Studio 启动 IDE 时, Visual Studio 设置命令 UI 上下文到当前默认源代码管理 VSPackage ID. 的 ID 这会导致积极的源代码管理 VSPackage 的静态 UI 显示 IDE,而在实际加载 VSPackage。 ,它进行任何调用 VSPackage 之前,Visual Studio 为 VSPackage 暂停到具有 Visual Studio 的传入寄存器 IVsRegisterScciProvider 。
下表描述了有关如何 Visual Studio IDE 的特定详细信息隐藏不同的 UI 项。
UI 项 |
说明 |
---|---|
菜单和工具栏 |
源代码管理包必须设置初始菜单和工具栏可见性状态到 .vsct 文件的 VisibilityConstraints 部分的源代码管理包 ID。 这使 Visual Studio IDE 正确设置菜单项的状态,而无需加载 VSPackage 和调用 QueryStatus 方法的实现。 |
工具窗口 |
它拥有的源代码管理 VSPackage 隐藏所有工具窗口时设置为非活动。 |
源代码管理 VSPackage 特定选项卡页 |
注册表项 HKLM \SOFTWARE\Microsoft\VisualStudio\X.Y\ToolsOptionsPages\VisibilityCmdUIContexts lets a VSPackage 设置为要求其选项页上显示的上下文。 在此关键下的注册表项必须使用创建服务标识符 (应更新源代码管理服务并为其分配一个 DWORD 值为 1。 每当 UI 操作在上下文发生源代码管理 VSPackage 注册, VSPackage 将调用,则处于活动状态。 |