了解属性说明架构
本主题介绍 Shell 属性系统使用的属性说明架构。
引入 Windows Vista 和更高版本的新功能需要将现有 Shell 属性系统扩展到:
- 支持丰富且可扩展的属性说明系统,该系统提供有关属性的信息,包括显示名称、类型、显示类型、排序和组行为,以及呈现和操作属性所需的其他属性。
- 支持属性类型的常用列表 (与 UI 结合使用,这些类型可以在列表视图、预览窗格、属性对话框等不同视图中编辑这些类型,) 可与各种属性相关联。
- 提供属性说明列表,用于定义显示在各种视图中的属性集。
- 提供简化的接口 IPropertyStore,以便可以更轻松地编写属性处理程序,并将属性保存到文件中。
- 支持非文件属性处理程序在视图中公开属性。
这些功能是在提供对 Shell 项属性的抽象访问的体系结构上实现的。 此抽象称为 Shell 属性系统。
什么是属性说明架构?
架构子系统由以下各项组成:
- 定义属性说明的一个或多个 .propdesc 架构文件。 属性说明架构是在系统运行时使用 .propdesc 文件扩展名) 在 XML 架构文件的集合中定义的, (。 当属性系统的一部分需要这些文件时,将延迟加载这些文件。
- 用于存储已分析架构文件的内存中架构缓存,其中包括引入子系统的所有属性说明。 无需重新分析描述架构的 .propdesc 配置文件。 有关详细信息,请参阅 PSRegisterPropertySchema、 PSUnregisterPropertySchema 和 PSRefreshPropertySchema。
- 实现 IPropertySystem 的子系统对象,用于获取或处理属性说明。
- 实现 IPropertyDescription 的子系统对象,该对象用于根据属性说明进行通知和操作。
- 实现 IPropertyDescriptionList 的子系统对象,用作属性说明的集合。
注意
必须将 添加到 xmlns=http://schemas.microsoft.com/windows/2006/propertydescription
.propdesc 文件的根架构元素。
为何使用架构?
属性本身不是类型安全的。 组件可以将数字值分配给 System.Author 属性,或将 FILETIME 日期戳分配给 System.Music.AlbumTitle 属性,并且无需进一步强制实施或指导,属性存储将允许它。 因此,我们需要一个概念来“架构化”属性,从而将我们带到架构子系统。
主要架构部分有哪些?
Shell 属性系统使用的属性说明架构由单个 propertyDescriptionList 元素和 schemaVersion 属性组成,该属性指示此架构定义格式的版本。 注意:值必须为“1.0”。
<!-- schema -->
<xs:element name="schema">
<xs:complexType>
<xs:sequence>
<xs:element ref="propertyDescriptionList" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="schemaVersion" type="xs:string"/>
</xs:complexType>
</xs:element>
propertyDescriptionList 由一个或多个 propertyDescription 元素以及发布者和产品属性组成。
<!-- propertyDescriptionList -->
<xs:element name="propertyDescriptionList">
<xs:complexType>
<xs:sequence>
<xs:element ref="propertyDescription" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="publisher" type="xs:string"/>
<xs:attribute name="product" type="xs:string"/>
</xs:complexType>
</xs:element>
propertyDescription 由一个 searchInfo 和零个或一个 labelInfo、typeInfo 和 displayInfo 元素以及 formatID、propID、propstr 和 name 属性组成。
对于要在系统中提供的每个唯一规范属性名称,都应有一个 propertyDescription 元素。 字符串属性的限制为 512 个字符。 超过 512 个字符的值将被截断。
<!-- propertyDescription -->
<xs:element name="propertyDescription">
<xs:complexType>
<xs:all>
<xs:element name="description" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element ref="searchInfo" minOccurs="1" maxOccurs="1"/>
<xs:element ref="labelInfo" minOccurs="0" maxOccurs="1"/>
<xs:element ref="typeInfo" minOccurs="0" maxOccurs="1"/>
<xs:element ref="displayInfo" minOccurs="0" maxOccurs="1"/>
</xs:all>
<xs:attribute name="formatID" type="upcase-uuid" use="required""/>
<xs:attribute name="propID" type="xs:nonNegativeInteger" use="required""/>
<xs:attribute name="name" type="canonical-name" use="required"/>
</xs:complexType>
</xs:element>
Windows 7 的更改
Windows 7 的属性说明架构已更改。 这些是非中断性变更。 如果 Windows 7 不再支持属性元素或属性,Windows 7 操作系统将忽略 Windows Vista 元素或属性。 同样,Windows Vista 也会忽略新的 Windows 7 属性元素或属性。
但是,建议更新 Windows 7 的自定义属性,以便获得更好、更一致的用户体验。
以下是新元素和属性:
- relatedPropertyInfo 和 relatedProperty 元素
- image 元素
- searchInfo 元素的助记键属性
- 枚举元素的助记键属性
- typeInfo 元素的 searchRawValue 属性
以下元素和属性已更改:
- enumeratedList、 enum 和 enumRange 元素
- drawControl 元素
- editControl 元素
- propertyDescription 元素的 propID 属性
- searchInfo 元素的 columnIndexType 属性
已删除以下元素和属性:
- queryControl 元素
- typeInfo 元素的 isQueryable 属性
- typeInfo 元素的 includeInFullTextQuery 属性
相关主题