“ 属性” 窗口显示网格中的字段。 左列包含属性名称;右侧列包含属性值。
使用网格
双列列表显示可在设计时更改的配置无关的属性及其当前设置。 请注意,可能不会显示所有属性。 例如,可以通过实现 HideProperty 方法将属性设置为隐藏。 具体而言,若要隐藏具有子属性的属性,
将
pfDisplay
参数 DisplayChildProperties 设置为FALSE
.将
pfHide
参数 HideProperty 设置为TRUE
.
若要将信息推送到 “属性” 窗口,IDE 使用 ISelectionContainer。
ISelectionContainer 由 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::Invoke
ITypeInfo::Invoke
使用表示所需信息的预定义调度标识符(DISPID)来获取对象名称等信息。 声明的 DISPID 为负值,以确保它们不会与用户定义的标识符冲突。
“ 属性” 窗口根据所选对象的特定属性的属性显示不同类型的字段。 这些字段包括编辑框、下拉列表和指向自定义编辑器对话框的链接。
枚举列表中包含的值由 GetObjects 查询检索到
IDispatch
。 通过双击字段名称,或者单击值并从下拉列表中选择新值,可以在属性网格中更改从枚举列表中获取的值。 对于具有枚举列表中的预定义设置的属性,双击“属性”列表中的属性名称会循环访问可用选项。 对于只有两个选项(如 true/false)的预定义属性,请双击属性名称在选项之间切换。HasDefaultValue如果是
false
,则指示值已更改,该值以粗体文本显示。 CanResetPropertyValue 用于确定该值是否可以重置为原始值。 如果是这样,可以通过右键单击该值并选择显示的菜单中的 “重置” 来更改回默认值。 否则,必须手动将值更改回默认值。 IVsPerPropertyBrowsing 此外,还可以本地化和隐藏在设计时显示的属性的名称,但不会影响在运行时显示的属性名称。单击省略号(...)按钮将显示一个属性值列表,用户可以从中选择这些属性值(例如颜色选取器或字体列表)。 IProvidePropertyBuilder 提供这些值。