AttributeCallbackBuilder 类
[本文档仅供预览,在以后的发行版中可能会发生更改。包含的空白主题用作占位符。]
将此类的实例传递给回调委托以惰式填充某个类型的特性。
继承层次结构
System.Object
Microsoft.Windows.Design.Metadata.AttributeCallbackBuilder
命名空间: Microsoft.Windows.Design.Metadata
程序集: Microsoft.Windows.Design.Extensibility(在 Microsoft.Windows.Design.Extensibility.dll 中)
语法
声明
Public NotInheritable Class AttributeCallbackBuilder
public sealed class AttributeCallbackBuilder
public ref class AttributeCallbackBuilder sealed
[<Sealed>]
type AttributeCallbackBuilder = class end
public final class AttributeCallbackBuilder
AttributeCallbackBuilder 类型公开以下成员。
属性
名称 | 说明 | |
---|---|---|
CallbackType | 获取要为其调用此回调的类型。 |
页首
方法
名称 | 说明 | |
---|---|---|
AddCustomAttributes(array<Attribute[]) | 将指定特性的内容添加到此生成器。 | |
AddCustomAttributes(String, array<Attribute[]) | 将特性添加到具有指定名称的成员。 | |
Equals | 确定指定的 Object 是否等于当前的 Object。 (继承自 Object。) | |
Finalize | 允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。) | |
GetHashCode | 用作特定类型的哈希函数。 (继承自 Object。) | |
GetType | 获取当前实例的 Type。 (继承自 Object。) | |
MemberwiseClone | 创建当前 Object 的浅表副本。 (继承自 Object。) | |
ToString | 返回表示当前对象的字符串。 (继承自 Object。) |
页首
备注
使用 AttributeCallbackBuilder 按需填充 AttributeTable。 这对于保存多个特性的特性表尤其重要。 如果仅指定类型的几个特性,则单独使用 AttributeTableBuilder。
在设计器请求目标类型的元数据之前,使用委托格式不会构造任何特性。 AttributeTableBuilder 将此回调信息转移至 AttributeTable 并保留该信息。 因此,仅按需调用这些回调委托。 调用后,它们的结果由 AttributeTable 进行缓存。
使用 AddCallback 方法启用按需特性创建。
示例
下面的代码示例演示如何使用 AttributeCallbackBuilder 类创建和填充特性表。
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Reflection;
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();
// Build the attribute table by using the AttributeCallbackBuilder
// class. The attribute table is not populated until the designer
// needs it, which is more efficient for large attribute tables.
builder.AddCallback(
typeof(Button),
delegate(AttributeCallbackBuilder callbackBuilder)
{
callbackBuilder.AddCustomAttributes(
new DefaultPropertyAttribute("Content"));
// Apply the ReadOnlyAttribute to the Background property
// of the Button class.
callbackBuilder.AddCustomAttributes(
"Background",
new ReadOnlyAttribute(true));
});
return builder.CreateTable();
}
}
}
}
线程安全
此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。
请参见
参考
Microsoft.Windows.Design.Metadata 命名空间