属性显示网格

属性” 窗口显示网格中的字段。 左列包含属性名称;右侧列包含属性值。

使用网格

双列列表显示可在设计时更改的配置无关的属性及其当前设置。 请注意,可能不会显示所有属性。 例如,可以通过实现 HideProperty 方法将属性设置为隐藏。 具体而言,若要隐藏具有子属性的属性,

  1. pfDisplay 参数 DisplayChildProperties 设置为 FALSE.

  2. pfHide 参数 HideProperty 设置为 TRUE.

若要将信息推送到 “属性” 窗口,IDE 使用 ISelectionContainerISelectionContainer 由 VSPackages 针对每个窗口调用,其中包含要显示在 “属性” 窗口中的相关属性的可选对象。 解决方案资源管理器使用__VSHPROPID实现ISelectionContainer调用GetProperty。 VSHPROPID_BrowseObject项目层次结构中获取层次结构中的可浏览对象。

如果 VSPackage 不支持 __VSHPROPID。VSHPROPID_BrowseObject,IDE 将尝试使用 GetProperty 值进行 __VSHPROPID。 VSHPROPID_SelContainer层次结构项或项提供。

项目 VSPackage 不需要创建ISelectionContainer,因为实现它(例如,解决方案资源管理器)的 IDE 提供的窗口包代表其构造ISelectionContainer

ISelectionContainer 由 IDE 调用的三种方法组成:

  • CountObjects 包含要显示在 “属性” 窗口中的对象数。

  • GetObjects 返回 IDispatch 选择要显示在 “属性” 窗口中的对象。

  • SelectObjects 使用户能够选择由 GetObjects 用户返回的任何对象。 这样,VSPackage 就可以直观地更新 UI 中向用户显示的选定内容。

属性” 窗口从 IDispatch 对象中提取信息,以检索要浏览的属性。 Properties 浏览器用于 IDispatch 向对象询问通过查询 ITypeInfo获取 IDispatch::GetTypeInfo的属性。 然后,浏览器使用这些值填充 “属性” 窗口,并更改网格中显示的单个属性的值。 属性信息保留在对象本身内。

由于返回的对象支持IDispatch,因此调用方可以通过调用或IDispatch::InvokeITypeInfo::Invoke使用表示所需信息的预定义调度标识符(DISPID)来获取对象名称等信息。 声明的 DISPID 为负值,以确保它们不会与用户定义的标识符冲突。

属性” 窗口根据所选对象的特定属性的属性显示不同类型的字段。 这些字段包括编辑框、下拉列表和指向自定义编辑器对话框的链接。

  • 枚举列表中包含的值由 GetObjects 查询检索到 IDispatch。 通过双击字段名称,或者单击值并从下拉列表中选择新值,可以在属性网格中更改从枚举列表中获取的值。 对于具有枚举列表中的预定义设置的属性,双击“属性”列表中的属性名称会循环访问可用选项。 对于只有两个选项(如 true/false)的预定义属性,请双击属性名称在选项之间切换。

  • false如果是HasDefaultValue,则指示值已更改,该值以粗体文本显示。 CanResetPropertyValue 用于确定该值是否可以重置为原始值。 如果是这样,可以通过右键单击该值并选择 显示的菜单中的“重置” 来更改回默认值。 否则,必须手动将值更改回默认值。 IVsPerPropertyBrowsing 此外,还可以本地化和隐藏在设计时显示的属性的名称,但不会影响在运行时显示的属性名称。

  • 单击省略号(...)按钮将显示一个属性值列表,用户可以从中选择这些属性值(例如颜色选取器或字体列表)。 IProvidePropertyBuilder 提供这些值。

另请参阅