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 命名空间

AttributeTableBuilder

AddCallback

AttributeTable

其他资源

演练:创建设计时装饰器