在“工具”菜单上选择“选项”时,“选项”窗格随即打开。 可从此窗格访问的设置类别统称为 选项页。
窗格的左侧部分提供顶级类别(或分区)及其子部分的导航。 每个节和子节都是选项页。 特定选项或设置显示在窗格的右侧部分。 在选项页上,可以更改用于确定 VSPackage 状态的选项和设置的值。
在“工具”菜单上选择“选项”时,将打开“选项”对话框。 可从此对话访问的设置类别统称为 选项页。
对话框的左侧部分提供顶级类别(或分区)及其子部分的导航。 每个节和子节都是选项页。 特定选项或设置显示在对话框的右侧部分。 在选项页上,可以更改用于确定 VSPackage 状态的选项和设置的值。
对选项页的支持
该 Package 类支持创建选项页和选项类别。 该 DialogPage 类实现选项页。
默认实现 DialogPage 将其公共属性提供给一般属性网格中的用户。 可以通过重写页面上的各种方法来自定义此行为,以创建具有其自己的用户界面(UI)的自定义选项页。 有关详细信息,请参阅 “创建选项”页。
该 DialogPage 类实现 IProfileManager,它为选项页和用户设置提供持久性。 如果属性可以转换到字符串,并且SaveSettingsToStorage方法的默认实现LoadSettingsFromStorage会将属性更改保存到注册表的用户节中。
选项页注册表路径
默认情况下,选项页管理的属性的注册表路径由组合 UserRegistryRoot、Word DialogPage 和选项页类的类型名称确定。 例如,选项页类可以定义如下。
如果 HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0ExpUserRegistryRoot ,则属性名称和值对是 HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0Exp\DialogPage\Company.OptionsPage.OptionsPageGeneral的子项。
选项页本身的注册表路径通过组合 ApplicationRegistryRoot、单词、ToolsOptionsPages 和选项页类别和名称来确定。 例如,如果“自定义选项”页具有类别、“我的选项页”和 ApplicationRegistryRoot “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0Exp”,则选项页具有注册表项,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0Exp\ToolsOptionsPages\My Option Pages\Custom。
工具/选项页属性和布局
该 ProvideOptionPageAttribute 属性确定将自定义选项页分组到 “选项 ”导航树中的类别中。 该 ProvideOptionPageAttribute 属性将选项页与提供接口的 VSPackage 相关联。 请考虑以下代码片段:
[ProvideOptionPage(typeof(OptionsPageGeneral),"My Option Pages", "General", 101, 106, true)]
[ProvideOptionPage(typeof(OptionsPageCustom), "My Option Pages", "Custom", 101, 107, true)]
[Guid("B0002DC2-56EE-4931-93F7-70D6E9863940")]
public class MyPackage : Package
这声明 MyPackage 提供两个选项页:OptionsPageGeneral 和 OptionsPageCustom。 在 “选项”下,这两个选项页分别显示在 “我的选项页 ”类别中,分别显示为 “常规 ”和“ 自定义”。
选项属性和布局
页面提供的用户界面(UI)决定了自定义选项页面中选项的外观。 泛型选项页中选项的布局、标记和说明由以下属性确定:
CategoryAttribute 确定选项的类别。
DisplayNameAttribute 确定选项的显示名称。
DescriptionAttribute 确定选项的说明。
注释
等效属性、SRCategory、LocDisplayName 和 SRDescription 使用字符串资源进行本地化,并在 托管项目示例中定义。
请考虑以下代码片段:
OptionInteger 选项在选项页上显示为“我的选项”类别中的整数选项。 如果选择了该选项,说明框将包含说明“ 我的整数”选项。
从另一个 VSPackage 访问选项页
可以使用自动化模型以编程方式从另一个 VSPackage 访问托管和管理选项页的 VSPackage。 例如,在以下代码中,VSPackage 注册为托管选项页。
[ProvideOptionPage(typeof(MyOptionPage), "My Category", "My Grid Page", 0, 0, true)]
[Guid("6bb6942e-014c-489e-a612-a935680f703d")]
public sealed class MyToolsOptions : Package
以下代码片段从 MyOptionPage 获取 OptionInteger 的值:
DTE dte = (DTE)GetService(typeof(DTE));
EnvDTE.Properties props = dte.get_Properties("My Category", "My Grid Page");
int n = (int)props.Item("OptionInteger").Value;
ProvideOptionPageAttribute当属性注册选项页时,如果SupportsAutomation属性的参数为 true,则页面在 AutomationProperties 键下注册。 自动化会检查此注册表项以查找关联的 VSPackage,然后自动化通过托管选项页访问该属性,在本例中为“我的网格页”。
自动化属性的注册表路径通过组合 ApplicationRegistryRoot、word、AutomationProperties 和选项页类别和名称来确定。 例如,如果选项页具有“我的类别”类别、“我的网格页”名称和 ApplicationRegistryRootHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0Exp,则自动化属性具有注册表项,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0Exp\AutomationProperties\My Category\My Grid Page。
注释
规范名称“My Category.My Grid Page”是此键的 Name 子项的值。