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


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

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

Ввод свойства

Класс PropertyEntry представляет собой свойство. Класс PropertyValue представляет основное значение свойства.

Редакторы категорий

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

Редакторы значений свойств

Редактор значений свойств определяет, как конкретный тип отображается и редактируется в окне "Свойства" визуального конструктора. Редактор значений свойств в сред. Конструктор WPF аналогичен классу UITypeEditor в архитектуре System.ComponentModel. Однако редакторы сред. Конструктор WPF не зависят от архитектуры System.ComponentModel и Windows Forms.

Класс PropertyValueEditor состоит из компонентов, перечисленных в следующей таблице.

Компонент редактора значений свойств

Описание

Встроенный редактор (также называемый представлением)

Редактор, размещенный в том же физическом пространстве, что и представление в главном окне "Свойства". Например, редактор свойств Margin.

Расширенный редактор

Этот редактор обычно скрыт. Он является эквивалентом раскрывающегося редактора стилей в архитектуре System.ComponentModel. Например, редактор свойств HorizontalAlignment.

Диалоговое окно

Редактор, реализованный в своем собственном диалоговом окне. Например, редактор свойств RowDefinitions.

Для встроенного редактора (или представления) можно использовать значения по умолчанию. Для использования компонента расширенного редактора класс PropertyValueEditor не требуется.

Каждый компонент является шаблоном DataTemplate WPF. Каждый компонент независим от остальных и может использоваться независимо от других.

В главном окне "Свойства" представление и редакторы оформляются фреймом. Благодаря этому в размещающем окне используется единообразный стиль во всех редакторах, а в других размещающих окнах можно использовать другие стили. Например, Expression Blend и Visual Studio предоставляют различный внешний вид и поведение для своих окон "Свойства".

Привязка данных WPF и стандартный набор объектов WPF RoutedCommand обеспечивают механизм связи между размещающим окном и компонентами PropertyValueEditor.

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

Можно реализовать три различных типа редакторов значений свойств. Эти типы перечислены в следующей таблице.

Тип редактора значения свойства

Описание

Простой

Редактор значений свойств состоит из встроенного редактора.

Расширенный

Редактор значений свойств состоит из встроенного редактора и расширенного редактора.

Диалоговый

Редактор значений свойств состоит из встроенного редактора и диалогового окна.

Классы инфраструктуры

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

Класс инфраструктуры

Описание

PropertyValue

Представляет значение свойства.

PropertyValueEditor

Базовый класс для редакторов значений.

PropertyValueEditorCommands

Типы команд RoutedCommand и реализации по умолчанию обработчиков для этих команд.

DialogPropertyValueEditor

Абстрактный базовый класс для редакторов значений "диалоговое окно".

  • Определяет команду ShowDialog и обработчик по умолчанию для этой команды.

  • Содержит представление по умолчанию и шаблон встроенного редактора.

  • Помечает редактор PropertyValueEditor в качестве редактора диалогового окна.

Реализация редактора значений свойств

В следующих разделах описаны аспекты реализации редактора значений свойств.

Value, StringValue и Collection

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

Свойство PropertyValue

Описание

Value

Объектное представление данных.

StringValue

Строковое представление данных, которое может использоваться для отображения или сериализации.

Collection

Представление данных в виде коллекции.

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

Кэш для свойства StringValue очищается, если задано значение Value. В распространенных случаях осуществляется поддержка динамического обновления разрабатываемого свойства (по мере ввода пользователем), где свойство StringValue представляет собой данные, привязанные к вводу текста. Однако основное свойство устанавливается, только если динамический текст удовлетворяет определенным условиям.

Требования к редактору PropertyValueEditor

Правильно реализованный редактор значений свойств должен удовлетворять следующим требованиям.

  • Редактор значений свойств должен быть разработан таким образом, чтобы компоненты встроенного и расширенного редактора можно было использовать независимо друг от друга.

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

  • Редактор значений свойств не должен предполагать, что только один элемент управления компонента редактора значений (представления/встроенного/расширенного) активен в данный момент времени. Например, в диалоговом окне могут быть активными одновременно компонент представления, встроенный редактор и расширенный редактор интерфейса пользователя.

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

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

См. также

Ссылки

PropertyEntry

PropertyValue

PropertyValueEditor

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

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

Создание пользовательских редакторов

WPF Designer Extensibility Samples