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


Архитектура контекста редактирования

В этом разделе объясняется роль контекста редактирования при разработке поставщиков функций и соединительных элементов для Конструктор WPF для Visual Studio. Дополнительные сведения о поставщиках функций и соединительных элементах см. в разделе Поставщики функций и соединительные элементы.

Контекст редактирования: запись текущего состояния конструктора

По мере использования визуальный конструктор накапливает значительный объем информации о состоянии. Состояние может представлять собой любой вид сведений времени разработки, например объекты в текущем выделении или поведение при щелчке кнопкой мыши. Состояние должно сохраняться в центральном расположении, чтобы при необходимости его можно было получить. Класс EditingContext представляет центральный репозиторий состояний для конструктора.

Службы

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

Элементы контекста

Элемент контекста является постоянным объектом и содержит состояние. Некоторые элементы контекста также определяют методы, которые могут выполнять операции над содержащимся в этих элементах состоянием.

Элемент контекста может быть добавлен и удален из контекста. Элементы контекста являются временными, но они всегда имеют значение. Даже если определенный элемент контекста не находится в контексте, он имеет значение по умолчанию и никогда не возвращает null.

В отличие от службы, значение элемента контекста может изменяться в любое время, поэтому никогда не следует кэшировать элемент контекста. Можно подписаться на обратный вызов по событию изменения, который возникает, когда изменяется конкретный тип элемента контекста.

Элементы контекста являются неизменяемыми, но для имитации изменения новые элементы контекста могут заменять существующие.

Подписки

Для служб и элементов контекста предусмотрены диспетчеры. Диспетчеры служб и диспетчеры элементов контекста представляют собой таблицы, в которых хранятся данные. Например, можно использовать диспетчер службы для публикации новых служб.

Диспетчеры служб и диспетчеры элементов контекста также предоставляют механизм подписки, который уведомляет код при наличии конкретного фрагмента данных. Это уведомление реализуется как делегат обратного вызова. Подписка — это делегат, который вызывается при добавлении определенного типа службы или элемента контекста.

Сходство со структурой конструктора ComponentModel

Назначение контекста редактирования аналогично назначению интерфейсов IDesignerHost и IServiceContainer в пространстве имен System.ComponentModel.Design. Дополнительные сведения см. в разделе Сравнение структуры конструктора Windows Forms со структурой конструктора WPF.

См. также

Ссылки

Microsoft.Windows.Design.Services

EditingContext

ContextItem

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

Расширяемость среды конструктора WPF