AttributeTableBuilder 类
创建定义设计时元数据的特性表。
继承层次结构
System.Object
Microsoft.Windows.Design.Metadata.AttributeTableBuilder
命名空间: Microsoft.Windows.Design.Metadata
程序集: Microsoft.Windows.Design.Extensibility(在 Microsoft.Windows.Design.Extensibility.dll 中)
语法
声明
Public Class AttributeTableBuilder
public class AttributeTableBuilder
public ref class AttributeTableBuilder
type AttributeTableBuilder = class end
public class AttributeTableBuilder
AttributeTableBuilder 类型公开以下成员。
构造函数
名称 | 说明 | |
---|---|---|
AttributeTableBuilder | 初始化 AttributeTableBuilder 类的新实例。 |
页首
方法
名称 | 说明 | |
---|---|---|
AddCallback | 添加一个在需要指定类型的元数据时调用的回调。 | |
AddCustomAttributes(Assembly, array<Attribute[]) | 将提供的特性数组的内容添加到表生成器。 | |
AddCustomAttributes(Type, array<Attribute[]) | 将提供的特性的内容添加到表生成器。 | |
AddCustomAttributes(Type, String, array<Attribute[]) | 将特性添加到具有指定名称的成员。 | |
AddTable | 将提供的特性表的内容添加到表生成器。 | |
CreateTable | 创建一个包含通过 AddCustomAttributes 调用提供的所有特性定义的特性表。 | |
Equals | 确定指定的 Object 是否等于当前的 Object。 (继承自 Object。) | |
Finalize | 允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。) | |
GetHashCode | 用作特定类型的哈希函数。 (继承自 Object。) | |
GetType | 获取当前实例的 Type。 (继承自 Object。) | |
MemberwiseClone | 创建当前 Object 的浅表副本。 (继承自 Object。) | |
ToString | 返回表示当前对象的字符串。 (继承自 Object。) | |
ValidateTable | 此方法用于验证所创建的特性表是否包含有效的特性信息。 |
页首
备注
若要创建特性表,需要先创建 AttributeTableBuilder 类的一个实例。 通过调用 AddCustomAttributes 重载将元数据添加到特性表生成器中。 添加完元数据后,通过调用 CreateTable 方法从特性表生成器中生成一个特性表。 特性表生成器方法支持回调委托,因此可将特性表的创建一直推迟到需要时。
如果要添加多个特性,请使用 AttributeCallbackBuilder 类,而不要使用 AttributeTableBuilder 类。 此方法将特性的创建推迟至设计器请求目标类型的元数据时。
示例
下面的代码示例演示如何使用 AttributeTableBuilder 类创建和填充特性表。 有关更多信息,请参见 演练:创建设计时装饰器。
Imports System
Imports System.Collections
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Reflection
Imports System.Text
Imports System.Windows.Media
Imports System.Windows.Controls
Imports System.Windows
Imports Microsoft.Windows.Design.Features
Imports Microsoft.Windows.Design.Metadata
' The ProvideMetadata assembly-level attribute indicates to designers
' that this assembly contains a class that provides an attribute table.
<Assembly: ProvideMetadata(GetType(CustomControlLibrary.VisualStudio.Design.Metadata))>
' Container for any general design-time metadata to initialize.
' Designers look for a type in the design-time assembly that
' implements IRegisterMetadata. If found, designers instantiate
' this class and call its Register() method automatically.
Friend Class Metadata
Implements IProvideAttributeTable
' Accessed by the designer to register any design-time metadata.
Public ReadOnly Property AttributeTable() As AttributeTable _
Implements IProvideAttributeTable.AttributeTable
Get
Dim builder As New AttributeTableBuilder()
builder.AddCustomAttributes( _
GetType(Button), _
New DefaultPropertyAttribute("Content"))
' Apply the ReadOnlyAttribute to the Background property
' of the Button class.
builder.AddCustomAttributes( _
GetType(Button), _
"Background", _
New ReadOnlyAttribute(True))
Dim attributes As AttributeTable = builder.CreateTable()
Return attributes
End Get
End Property
End Class
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Reflection;
using System.Text;
using System.Windows.Media;
using System.Windows.Controls;
using System.Windows;
using Microsoft.Windows.Design.Features;
using Microsoft.Windows.Design.Metadata;
// The ProvideMetadata assembly-level attribute indicates to designers
// that this assembly contains a class that provides an attribute table.
[assembly: ProvideMetadata(typeof(CustomControlLibrary.VisualStudio.Design.Metadata))]
namespace CustomControlLibrary.VisualStudio.Design
{
// Container for any general design-time metadata to initialize.
// Designers look for a type in the design-time assembly that
// implements IProvideAttributeTable. If found, designers instantiate
// this class and access its AttributeTable property automatically.
internal class Metadata : IProvideAttributeTable
{
// Accessed by the designer to register any design-time metadata.
public AttributeTable AttributeTable
{
get
{
AttributeTableBuilder builder = new AttributeTableBuilder();
builder.AddCustomAttributes(
typeof(Button),
new DefaultPropertyAttribute("Content"));
// Apply the ReadOnlyAttribute to the Background property
// of the Button class.
builder.AddCustomAttributes(
typeof(Button),
"Background",
new ReadOnlyAttribute(true));
AttributeTable attributes = builder.CreateTable();
return attributes;
}
}
}
}
线程安全
此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。