选项和选项页

单击“工具”菜单上的“选项”将打开“选项”对话框。 此对话框中的选项统称为选项页。 导航窗格中的树控件包括选项类别,并且每个类别都有选项页。 选择页面时,其选项将显示在右窗格中。 通过这些页面,可以更改确定 VSPackage 状态的选项的值。

对选项页的支持

Package 类支持创建选项页和选项类别。 该 DialogPage 类实现选项页。

默认实现 DialogPage 将其公共属性提供给一般属性网格中的用户。 可以通过重写页面上的各种方法来自定义此行为,以创建具有其自己的用户界面(UI)的自定义选项页。 有关详细信息,请参阅 “创建选项”页

DialogPage 类实现 IProfileManager,它为选项页和用户设置提供持久性。 如果属性可以转换到字符串,并且SaveSettingsToStorage方法的默认实现LoadSettingsFromStorage会将属性更改保存到注册表的用户节中。

选项页注册表路径

默认情况下,选项页管理的属性的注册表路径由组合 UserRegistryRoot、Word DialogPage 和选项页类的类型名称确定。 例如,选项页类可以定义如下。

namespace Company.OptionsPage
{
    public class OptionsPageGeneral : DialogPage
    {
    }
}

UserRegistryRoot如果HKEY_CURRENT_U标准版R\Software\Microsoft\VisualStudio\8.0Exp,则属性名称和值对是 HKEY_CURRENT_U标准版R\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 使用字符串资源进行本地化,并在托管项目示例中定义

    可考虑使用以下 代码段:

    [Category("My Options")]
    [DisplayName("Integer Option")]
    [Description("My integer option")]
    public int OptionInteger { get; set; }
    

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 和选项页类别和名称来确定。 例如,如果选项页具有“我的类别”、“我的网格页名称”和 ApplicationRegistryRoot“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0Exp”,则自动化属性具有注册表项,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0Exp\AutomationProperties\My Category\My Grid Page。

注意

规范名称“我的 Category.My 网格页”是此键的名称子项的值。