AttributeCallbackBuilder 클래스
업데이트: 2007년 11월
이 클래스의 인스턴스는 형식의 특성을 나중에 채우는 콜백 대리자에 전달됩니다.
네임스페이스: Microsoft.Windows.Design.Metadata
어셈블리: Microsoft.Windows.Design(Microsoft.Windows.Design.dll)
구문
Public NotInheritable Class AttributeCallbackBuilder
Dim instance As AttributeCallbackBuilder
public sealed class AttributeCallbackBuilder
public ref class AttributeCallbackBuilder sealed
public final class AttributeCallbackBuilder
설명
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;
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 IRegisterMetadata. If found, designers instantiate
// this class and call its Register() method automatically.
internal class Metadata : IRegisterMetadata
{
// Called by the designer to register any design-time metadata.
public void Register()
{
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));
PropertyDescriptorCollection properties =
TypeDescriptor.GetProperties(typeof(Button));
PropertyDescriptor pd = properties["Foreground"];
callbackBuilder.AddCustomAttributes(
pd,
new ReadOnlyAttribute(true));
callbackBuilder.AddCustomAttributes(
Button.WidthProperty,
new TypeConverterAttribute(typeof(LengthConverter)),
new DescriptionAttribute("This is the width"));
MemberInfo[] members = typeof(Button).GetMember("Height");
callbackBuilder.AddCustomAttributes(
members[0],
new ReadOnlyAttribute(true));
});
MetadataStore.AddAttributeTable(builder.CreateTable());
}
}
}
상속 계층 구조
System.Object
Microsoft.Windows.Design.Metadata.AttributeCallbackBuilder
스레드로부터의 안전성
이 형식의 모든 공용 static(Visual Basic의 경우 Shared) 멤버는 스레드로부터 안전합니다. 인터페이스 멤버는 스레드로부터 안전하지 않습니다.
참고 항목
참조
Microsoft.Windows.Design.Metadata 네임스페이스