Partilhar via


Delegado AttributeCallback

Chamado quando atributos são necessários para um tipo.

Namespace:  Microsoft.Windows.Design.Metadata
Assembly:  Microsoft.Windows.Design (em Microsoft.Windows.Design.dll)

Sintaxe

Public Delegate Sub AttributeCallback ( _
    builder As AttributeCallbackBuilder _
)

Dim instance As New AttributeCallback(AddressOf HandlerMethod)
public delegate void AttributeCallback(
    AttributeCallbackBuilder builder
)
public delegate void AttributeCallback(
    AttributeCallbackBuilder^ builder
)
O JScript não oferece suporte a delegados.

Parâmetros

Comentários

Use o AttributeCallback delegado ao preencher uma tabela grande do atributo. Usando o padrão de retorno de chamada, atributo tabela população é adiada até que o designer deve os metadados de time de design para um tipo.

Exemplos

O exemplo de código a seguir mostra como criar e popular uma tabela de atributo usando o AttributeCallbackBuilder classe.

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());
        }
    }
}

Consulte também

Referência

Namespace Microsoft.Windows.Design.Metadata

AttributeTableBuilder

AddCallback

AttributeTable

Outros recursos

Armazenamento de metadados

Demonstra Passo a passo: Criando um Adorner de tempo de design

Noções básicas sobre extensibilidade Designer WPF