Поделиться через


Предоставление метаданных времени разработки

При создании пользовательских взаимодействий разработки для элемента управления WPF или Silverlight вы развертываете их в отдельных сборках времени разработки. Вы задаете, как эти реализации времени разработки взаимодействуют с такими средствами, как Visual Studio и Expression Blend, создавая таблицу, заполняемую атрибутами метаданных.

Сборки времени разработки

Когда средство разработки, такое как Visual Studio, открывает сборку пользовательского элемента управления, оно ищет и связанные сборки времени разработки. В частности, средство разработки ищет атрибут уровня сборки ProvideMetadataAttribute. Когда этот атрибут найден, конструктор ищет сборку для класса, реализующего интерфейс IProvideAttributeTable. Конструктор запрашивает свойство AttributeTable этого класса для получения коллекции атрибутов, определяющих поведение времени разработки. Дополнительные сведения см. в разделах Пошаговое руководство. Предоставление пользовательских метаданных времени разработки и Развертывание сборок пользовательских элементов управления и сборок времени разработки.

Таблица атрибутов

Класс AttributeTable ассоциирует атрибуты метаданных времени разработки с типами WPF и Silverlight. Таблица атрибутов задает определенную реализацию времени разработки для разрабатываемого типа. Например. если имеется пользовательский элемент AdornerPanel для вашего элемента управления, вы добавляете FeatureAttribute в таблицу атрибутов, чтобы задать пользовательскую реализацию FeatureProvider.

Построитель таблиц атрибутов

Создание таблицы атрибутов начинается с создания экземпляра класса AttributeTableBuilder. Добавление метаданных в конструктор таблиц атрибутов производится путем вызова метода AddCustomAttributes. По завершении добавления метаданных вы создаете таблицу атрибутов посредством вызова метода CreateTable. Методы конструктора таблиц атрибутов поддерживают делегаты обратного вызова, поэтому создание таблицы атрибутов может быть отложено до необходимости.

В следующем коде показано, как задать пользовательскую реализацию графического элемента с использованием таблицы атрибутов.

' 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.
Friend Class Metadata
    Implements IProvideAttributeTable

    ' Accessed by the designer to register any design-time metadata.
    Public ReadOnly Property AttributeTable() As AttributeTable _
        Implements IProvideAttributeTable.AttributeTable
        Get
            Dim builder As New AttributeTableBuilder()

            ' Add the adorner provider to the design-time metadata.
            builder.AddCustomAttributes(GetType(ButtonWithDesignTime), _
                                        New FeatureAttribute(GetType(OpacitySliderAdornerProvider)))

            Return builder.CreateTable()
        End Get
    End Property


End Class
// 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();

            // Add the adorner provider to the design-time metadata.
            builder.AddCustomAttributes(
                typeof(ButtonWithDesignTime),
                new FeatureAttribute(typeof(OpacitySliderAdornerProvider)));

            return builder.CreateTable();
        }
    }
}

Дополнительные сведения см. в разделе Пошаговое руководство. Создание графического элемента времени разработки.

Базовый рабочий процесс реализации времени разработки

При создании пользовательского взаимодействия разработки вы обычно следуете подобному рабочему процессу. Дополнительные сведения см. в разделе Практическое руководство. Развертывание сборки пользовательского элемента управления и сборок времени разработки.

Примеры реализации пользовательского взаимодействия времени разработки см. в разделе Примеры расширяемости конструктора WPF и Silverlight.

Преимущества отдельных сборок времени разработки

Платформа Конструктор WPF для Visual Studio отделяет метаданные времени разработки от реализации. Отделение метаданных от кода элемента управления времени выполнения является важным принципом разработки по следующим причинам.

  • Процесс построения и схема взаимодействия групп может усложнить включение метаданных в элемент управления при компиляции.

  • Включение метаданных в код элемента управления выполнения не позволяет таким внешним инструментам, как сред. Конструктор WPF или Expression Blend, изменять эти метаданные впоследствии. Это значительно затрудняет перенастройку. Без разделения элемента управления и метаданных времени разработки Visual Studio не может изменять версию своих конструкторов без новой версии .NET Framework.

  • Включение метаданных в элемент управления существенно увеличивает размер сборки элемента управления. Атрибуты времени разработки также замедляют работу элемента управления. Загрузка дополнительных атрибутов в память влияет на такие характеристики элемента управления, как привязка данных, использующая механизм отражения.

  • Метаданные времени разработки отвечают за "персонализацию" конструктора. Характеристики конструктора в основном зависят от основного приложения, а не от элемента управления. Для формирования набора функций, предназначенного для пользователей определенного профиля, в сред. Конструктор WPF и средстве Expression Blend используются различные наборы метаданных.

См. также

Ссылки

AttributeTable

ProvideMetadataAttribute

Другие ресурсы

Практическое руководство. Развертывание сборки пользовательского элемента управления и сборок времени разработки

Развертывание сборок пользовательских элементов управления и сборок времени разработки

Основные понятия расширяемости

Общее представление о расширяемости конструктора WPF