AttributeCallbackBuilder-Klasse
Aktualisiert: November 2007
Eine Instanz dieser Klasse wird an Rückrufdelegate übergeben, um die Attribute für einen Typ sehr langsam zu füllen.
Namespace: Microsoft.Windows.Design.Metadata
Assembly: Microsoft.Windows.Design (in Microsoft.Windows.Design.dll)
Syntax
Public NotInheritable Class AttributeCallbackBuilder
Dim instance As AttributeCallbackBuilder
public sealed class AttributeCallbackBuilder
public ref class AttributeCallbackBuilder sealed
public final class AttributeCallbackBuilder
Hinweise
Verwenden Sie den AttributeCallbackBuilder, um die AttributeTable bei Bedarf zu füllen. Dies ist bei Attributtabellen mit zahlreichen Attributen von besonderer Wichtigkeit. Wenn Sie für einen Typ nur einige Attribute angeben, verwenden Sie allein AttributeTableBuilder.
Bei Verwendung des Delegatformats werden so lange keine Attribute erstellt, bis vom Designer Metadaten für den Zieltyp angefordert werden. Diese Rückrufinformationen werden vom AttributeTableBuilder in die AttributeTable übertragen und dort aufbewahrt. Daher werden diese Rückrufdelegaten nur bei Bedarf aufgerufen. Nach erstmaligem Aufruf werden ihre Ergebnisse in der AttributeTable zwischengespeichert.
Mit der AddCallback-Methode können Sie die bedarfsabhängige Attributerstellung aktivieren.
Beispiele
Im folgenden Codebeispiel wird gezeigt, wie eine Attributtabelle mithilfe der AttributeCallbackBuilder-Klasse erstellt und gefüllt wird.
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());
}
}
}
Vererbungshierarchie
System.Object
Microsoft.Windows.Design.Metadata.AttributeCallbackBuilder
Threadsicherheit
Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.
Siehe auch
Referenz
AttributeCallbackBuilder-Member
Microsoft.Windows.Design.Metadata-Namespace
Weitere Ressourcen
Exemplarische Vorgehensweise: Erstellen eines Entwurfszeitadorners