Freigeben über


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

AttributeTableBuilder

AddCallback

AttributeTable

Weitere Ressourcen

Metadatenspeicher

Exemplarische Vorgehensweise: Erstellen eines Entwurfszeitadorners