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


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

Многие классы в Windows Presentation Foundation (WPF) являются производными от четырех классов, на которые в документации SDK часто ссылаются как на базовые классы элементов. Этими классами являются UIElement, FrameworkElement ContentElement и 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, с этим разделением также существуют, как и APIs, разделенные между сборками PresentationCore и PresentationFramework. Уровень структуры WPF предоставляет более полное решение для нужд основного приложения, включая реализацию диспетчера макета для представления. уровень ядра WPF позволяет использовать большую часть WPF без загрузки дополнительной сборки. Различие между этими уровнями очень редко имеет значение для большинства обычных скриптов разработки приложения, и в общем вы должны представлять WPF APIsкак единое целое, и вам не нужно заботиться о разнице между уровнем ядра WPF и уровнем структуры WPF. Возможно, вам необходимо знать о различии уровней, если при разработке вашего приложения вам придется заменить значительное количество функциональных возможностей уровня структуры WPF, если ваше общее решение уже имеет свои собственные реализации композиции user interface (UI) и макет.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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, является шаблон элемента управления.

См. также

Ссылки

Control

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

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

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

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