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


Общие сведения о базовых элементах

Обновлен: Ноябрь 2007

Высокий процент классов в Windows Presentation Foundation (WPF) является производным от четырех классов, на которые часто ссылаются в документации Пакет SDK как на базовые классы элементов. Этими классами являются UIElement, FrameworkElementContentElement и FrameworkContentElement. Класс DependencyObject также связан, поскольку это общий базовый класс UIElement и ContentElement

В этом разделе содержатся следующие подразделы.

  • Базовый элемент интерфейсов API в классах WPF
  • Выбор элемента для наследования
  • Другие базовые классы
  • Связанные разделы

Базовый элемент интерфейсов API в классах WPF

UIElement и ContentElement являются производными от DependencyObject, через несколько различных путей. Разделение на этом уровне имеет дело с тем, как UIElement или ContentElement используются в пользовательском интерфейсе и для какой цели они служат в приложении. UIElement также содержит Visual в своей иерархии класса, который является классом, предоставляющим низкоуровневую поддержку графики лежащего в основе Windows Presentation Foundation (WPF). Visual предоставляет структуру отрисовки путем определения независимых прямоугольных областей экрана. На практике UIElement предназначен для элементов, которые будут поддерживать большую объектную модель, предназначенную для отображения и макета в областях, которые можно описать как области прямоугольного экрана, и где модель содержимого намеренно более открыта, чтобы разрешить различные сочетания элементов.ContentElement не является производным от Visual; его модель ContentElement, которая будет принята какой-нибудь еще, такой как программа чтения или просмотра, которая будет затем интерпретировать элементы и создавать законченный Visual для приема Windows Presentation Foundation (WPF). Некоторые классы UIElement предназначены быть содержимым хостов: они обеспечивают размещение и отрисовку для одного или нескольких классов ContentElement (DocumentViewer является примером такого класса).ContentElement используется как базовый класс для элементов с несколько меньшими моделями объекта и что дополнительный адрес содержимого текста, данных или документа, который может быть размещен в UIElement.

Уровень структуры и уровень ядра

UIElement служит в качестве базового класса для FrameworkElement, а ContentElement служит в качестве базового класса для FrameworkContentElement. Причиной для этого следующего уровня классов является поддержка уровня ядра WPF, который отличается от уровня структуры WPF, с этим разделением также существуют, как и API-интерфейсы, разделенные между сборками PresentationCore и PresentationFramework. Уровень структуры WPF предоставляет более полное решение для нужд основного приложения, включая реализацию диспетчера макета для представления. уровень ядра WPF позволяет использовать большую часть WPF без загрузки дополнительной сборки. Различие между этими уровнями очень редко имеет значение для большинства обычных сценариев разработки приложения, и в общем вы должны представлять WPF API-интерфейсыкак единое целое, и вам не нужно заботиться о разнице между уровнем ядра WPF и уровнем структуры WPF. Возможно, вам необходимо знать о различии уровней, если при разработке вашего приложения вам придется заменить значительное количество функциональных возможностей уровня структуры WPF, если ваше общее решение уже имеет свои собственные реализации композиции пользовательский интерфейс и макет.

Выбор элемента для наследования

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

Если вы реализуете элемент управления, который в действительности является одним из наиболее распространенных причин для создания производного от класса WPF, вам, возможно, потребуется создать класс, производный от класса, который является практическим элементом управления, базовым классом семейства элементов управления, или по крайней мере классом из базового класса Control. Некоторые рекомендации и практические примеры содержатся в Общие сведения о разработке управления.

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

Если вы создаете класс, производный от DependencyObject, вы наследуете следующие функциональные возможности:

  • Поддержку GetValue и SetValue и общую системную поддержку свойств.

  • Возможность использовать свойства зависимости и вложенные свойства, которые реализованы в качестве свойств зависимостей.

Если вы создаете класс, производный от UIElement, вы наследуете следующие функциональные возможности в дополнение к предоставляемым DependencyObject:

Если вы создаете класс, производный от FrameworkElement, вы наследуете следующие функциональные возможности в дополнение к предоставляемым UIElement:

  • Поддержка стилей и раскадровок. Дополнительные сведения см. в разделах Style и Общие сведения о Storyboard.

  • Поддержка привязки данных. Дополнительные сведения см. в разделе Общие сведения о связывании данных.

  • Поддержка ссылок динамического ресурса. Дополнительные сведения см. в разделе Общие сведения о ресурсах.

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

  • Понятие логического дерева. Дополнительные сведения см. в разделе Деревья в WPF.

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

Если вы создаете класс, производный от ContentElement, вы наследуете следующие функциональные возможности в дополнение к предоставляемым DependencyObject:

Если вы создаете класс, производный от FrameworkContentElement, вы наследуете следующие функциональные возможности в дополнение к предоставляемым ContentElement:

  • Поддержка стилей и раскадровок. Дополнительные сведения см. в разделах Style и Общие сведения об эффектах анимации.

  • Поддержка привязки данных. Дополнительные сведения см. в разделе Общие сведения о связывании данных.

  • Поддержка ссылок динамического ресурса. Дополнительные сведения см. в разделе Общие сведения о ресурсах.

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

  • Вы не наследуете доступ к изменениям системы макета (например, ArrangeOverride). Реализации системы макета доступны только на FrameworkElement. Однако вы наследуете переопределениеOnPropertyChanged, которое может обнаружить изменения свойств, которые влияют на макет, и сообщить это любым узлам содержимого.

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

Другие базовые классы

Объект-диспетчер

DispatcherObject обеспечивает поддержку для поточной модели WPF и включает все объекты, созданные для приложений WPF, связанных с Dispatcher. Даже если вы не создаете производный объект от UIElement, DependencyObject или Visual, вам следует рассмотреть создание производного объекта от DispatcherObject, чтобы получить поддержку потоковой модели. Дополнительные сведения см. в разделе Модель потоков.

Визуальный элемент

Visual реализует концепцию 2D объекта, обычно требующего визуального представления в примерную прямоугольную область. Фактическая отрисовка Visual происходит в других классах (не автономно), но класс Visual предоставляет известный тип, который используется в отображении процессов на различных уровнях.Visual реализует проверку попадания курсора, но он не предоставляет события, сообщающие, что проверка попадания увенчалась успехом (они располагаются в UIElement). Дополнительные сведения см. в разделе Программирование визуального слоя.

Freezable

Freezable имитирует постоянство в изменяемом объекте, предоставляя средства для создания копий объекта, когда постоянный объект требуется или необходим по причине производительности. Тип Freezable обеспечивает общую основу для определенных графических элементов, таких как геометрические формы и кисти, а также анимации. Часто Freezable не является Visual; он может содержать свойства, которые становятся подсвойствами, когда Freezable применяется к заполнению значения свойства другого объекта, и эти подсвойства могут влиять на отрисовку. Дополнительные сведения см. в разделе Общие сведения об объектах класса Freezable.

Animatable

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

Элемент управления

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

См. также

Основные понятия

Общие сведения о свойствах зависимости

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

Архитектура WPF

Ссылки

Control