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

Высокий процент классов в Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) являются производными от четырех классов, которые часто упоминаются в документации по пакету SDK как классы базовых элементов.A high percentage of classes in Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) are derived from four classes which are commonly referred to in the SDK documentation as the base element classes. Этими классами являются UIElement, FrameworkElement, ContentElementи FrameworkContentElement.These classes are UIElement, FrameworkElement, ContentElement, and FrameworkContentElement. Класс DependencyObject также связан, так как он является общим базовым классом как для UIElement, так и для ContentElementThe DependencyObject class is also related, because it is a common base class of both UIElement and ContentElement

Интерфейсы API базовых элементов в классах WPFBase Element APIs in WPF Classes

И UIElement, и ContentElement являются производными от DependencyObject, через несколько разных путей.Both UIElement and ContentElement are derived from DependencyObject, through somewhat different pathways. Разбиение на этом уровне работает с тем, как UIElement или ContentElement используются в пользовательском интерфейсе и какие цели они обслуживают в приложении.The split at this level deals with how a UIElement or ContentElement are used in a user interface and what purpose they serve in an application. UIElement также имеет Visual в своей иерархии классов, которая представляет собой класс, предоставляющий поддержку графики нижнего уровня, которая является базовой для Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF).UIElement also has Visual in its class hierarchy, which is a class that exposes the lower-level graphics support underlying the Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF). Visual предоставляет платформу отрисовки, определяя независимые прямоугольные области экрана.Visual provides a rendering framework by defining independent rectangular screen regions. На практике UIElement для элементов, которые будут поддерживать более крупную объектную модель, предназначены для отрисовки и разметки в регионах, которые можно описать как прямоугольные области экрана, и где модель содержимого намеренно более открыта, чтобы разрешить различные сочетания элементов.In practice, UIElement is for elements that will support a larger object model, are intended to render and layout into regions that can be described as rectangular screen regions, and where the content model is deliberately more open, to allow different combinations of elements. ContentElement не является производным от Visual; его модель заключается в том, что ContentElement будет использоваться каким-либо другим, таким как читатель или средство просмотра, которое затем будет интерпретировать элементы и создать полную Visual для использования Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF).ContentElement does not derive from Visual; its model is that a ContentElement would be consumed by something else, such as a reader or viewer that would then interpret the elements and produce the complete Visual for Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) to consume. Некоторые UIElement классы предназначены для размещения содержимого: они предоставляют размещение и отрисовку для одного или нескольких классов ContentElement (DocumentViewer является примером такого класса).Certain UIElement classes are intended to be content hosts: they provide the hosting and rendering for one or more ContentElement classes (DocumentViewer is an example of such a class). ContentElement используется в качестве базового класса для элементов с небольшими объектными моделями и позволяет более подробно обращаться к тексту, информации или содержимому документа, которое может размещаться в UIElement.ContentElement is used as base class for elements with somewhat smaller object models and that more address the text, information, or document content that might be hosted within a UIElement.

Уровень платформы и уровень ядраFramework-Level and Core-Level

UIElement выступает в качестве базового класса для FrameworkElement, а ContentElement выступает в качестве базового класса для FrameworkContentElement.UIElement serves as the base class for FrameworkElement, and ContentElement serves as the base class for FrameworkContentElement. Причиной следующего уровня классов является поддержка уровня ядра WPF, отделенного от уровня платформы WPF. Кроме того, это разделение также существует в том, как интерфейсы API делятся между сборками PresentationCore и PresentationFramework.The reason for this next level of classes is to support a WPF core level that is separate from a WPF framework level, with this division also existing in how the APIs are divided between the PresentationCore and PresentationFramework assemblies. Уровень платформы WPF предоставляет более полное удовлетворение потребностей основного приложения, включая реализацию диспетчера макетов для представления.The WPF framework level presents a more complete solution for basic application needs, including the implementation of the layout manager for presentation. Уровень ядра WPF позволяет использовать по максимуму возможности WPFWPF, не прибегая к затратам на дополнительные сборки.The WPF core level provides a way to use much of WPFWPF without taking the overhead of the additional assembly. Различие между этими уровнями очень редко имеет значение для большинства типичных сценариев разработки приложений, и в целом следует рассматривать WPFWPF API как единое целое, не заботясь о различиях между уровнями платформы WPF и уровня ядра WPF.The distinction between these levels very rarely matters for most typical application development scenarios, and in general you should think of the WPFWPF APIs as a whole and not concern yourself with the difference between WPF framework level and WPF core level. Различия в уровнях следует учитывать в том случае, если при разработке приложения решено заменить значительное количество функций уровня платформы WPF, например если общее решение уже имеет свои собственные реализации композиции и макета пользовательский интерфейсuser interface (UI).You might need to know about the level distinctions if your application design chooses to replace substantial quantities of WPF framework level functionality, for instance if your overall solution already has its own implementations of пользовательский интерфейсuser interface (UI) composition and layout.

Выбор элемента для наследованияChoosing Which Element to Derive From

Наиболее удобным способом создания другого класса, расширяющего возможности WPFWPF, является наследование от одного из классов WPFWPF. Тогда вы получаете максимально возможное количество наследуемых функций благодаря существующей иерархии классов.The most practical way to create a custom class that extends WPFWPF is by deriving from one of the WPFWPF classes where you get as much as possible of your desired functionality through the existing class hierarchy. В этом разделе перечислены возможности, предоставляемые тремя наиболее важными классами элементов. Эти сведения помогут вам решить, какой класс использовать для наследования.This section lists the functionality that comes with three of the most important element classes to help you decide which class to inherit from.

Если вы реализуете элемент управления, который на самом деле является одной из наиболее распространенных причин для наследования от класса WPFWPF, вероятно, вам потребуется создать производный класс от класса, который является практическим элементом управления, базовым классом семейства элементов управления или по крайней мере из базового класса Control.If you are implementing a control, which is really one of the more common reasons for deriving from a WPFWPF class, you probably want to derive from a class that is a practical control, a control family base class, or at least from the Control base class. Некоторые рекомендации и практические примеры см. в разделе Общие сведения о разработке элементов управления.For some guidance and practical examples, see Control Authoring Overview.

Если вы не создаете элемент управления, а хотите создать производный класс от класса, который находится выше по иерархии, в следующих разделах вы найдете рекомендации по определению характеристик для каждого базового класса элементов.If you are not creating a control and need to derive from a class that is higher in the hierarchy, the following sections are intended as a guide for what characteristics are defined in each base element class.

При создании класса, производного от DependencyObject, вы наследуете следующие функциональные возможности:If you create a class that derives from DependencyObject, you inherit the following functionality:

  • Поддержка GetValue и SetValue и общая поддержка системы свойств.GetValue and SetValue support, and general property system support.

  • Возможность использования свойств зависимостей и вложенных свойств, которые реализуются как свойства зависимостей.Ability to use dependency properties and attached properties that are implemented as dependency properties.

При создании класса, производного от UIElement, вы наследуете следующие функциональные возможности, помимо предоставляемых DependencyObject:If you create a class that derives from UIElement, you inherit the following functionality in addition to that provided by DependencyObject:

При создании класса, производного от FrameworkElement, вы наследуете следующие функциональные возможности, помимо предоставляемых UIElement:If you create a class that derives from FrameworkElement, you inherit the following functionality in addition to that provided by UIElement:

  • Поддержка стилей и раскадровок.Support for styling and storyboards. Дополнительные сведения см. в разделе Обзор Style и раскадровок.For more information, see Style and Storyboards Overview.

  • Поддержка привязки данных.Support for data binding. Более подробную информацию см. в разделе Общие сведения о связывании данных.For more information, see Data Binding Overview.

  • Поддержка ссылок на динамические ресурсы.Support for dynamic resource references. Дополнительные сведения см. в разделе Ресурсы XAML.For more information, see XAML Resources.

  • Поддержка наследования значений свойств и других флагов в метаданных, которые помогают передавать сведения о состоянии свойств в службы платформы, такие как привязка данных, управление стилями и реализация структуры макета.Property value inheritance support, and other flags in the metadata that help report conditions about properties to framework services such as data binding, styles, or the framework implementation of layout. Дополнительные сведения см. в разделе Метаданные свойств платформы.For more information, see Framework Property Metadata.

  • Понятие логического дерева.The concept of the logical tree. Дополнительные сведения см. в разделе Деревья в WPF.For more information, see Trees in WPF.

  • Поддержка практической реализации системы макета на уровне платформы WPF, включая переопределение OnPropertyChanged, которое может обнаруживать изменения свойств, влияющих на макет.Support for the practical WPF framework-level implementation of the layout system, including an OnPropertyChanged override that can detect changes to properties that influence layout.

При создании класса, производного от ContentElement, вы наследуете следующие функциональные возможности, помимо предоставляемых DependencyObject:If you create a class that derives from ContentElement, you inherit the following functionality in addition to that provided by DependencyObject:

При создании класса, производного от FrameworkContentElement, вы получаете следующие функциональные возможности, помимо предоставляемых ContentElement:If you create a class that derives from FrameworkContentElement, you get the following functionality in addition to that provided by ContentElement:

  • Поддержка стилей и раскадровок.Support for styling and storyboards. Дополнительные сведения см. в разделе Обзор Style и анимации.For more information, see Style and Animation Overview.

  • Поддержка привязки данных.Support for data binding. Более подробную информацию см. в разделе Общие сведения о связывании данных.For more information, see Data Binding Overview.

  • Поддержка ссылок на динамические ресурсы.Support for dynamic resource references. Дополнительные сведения см. в разделе Ресурсы XAML.For more information, see XAML Resources.

  • Поддержка наследования значений свойств и других флагов в метаданных, которые помогают передавать сведения о состоянии свойств в службы платформы, такие как привязка данных, управление стилями и реализация структуры макета.Property value inheritance support, and other flags in the metadata that help report conditions about properties to framework services like data binding, styles, or the framework implementation of layout. Дополнительные сведения см. в разделе Метаданные свойств платформы.For more information, see Framework Property Metadata.

  • Вы не наследуете доступ к изменениям системы макета (например, ArrangeOverride).You do not inherit access to layout system modifications (such as ArrangeOverride). Реализации системы макета доступны только в FrameworkElement.Layout system implementations are only available on FrameworkElement. Однако вы наследуете переопределение OnPropertyChanged, которое может обнаруживать изменения свойств, влияющих на макет, и передавать их на любые узлы содержимого.However, you inherit an OnPropertyChanged override that can detect changes to properties that influence layout and report these to any content hosts.

Модели содержимого описаны в документации для различных классов.Content models are documented for a variety of classes. Модель содержимого, принятая для класса, возможно, является тем фактором, который следует рассмотреть при выборе подходящего класса для наследования.The content model for a class is one possible factor you should consider if you want to find an appropriate class to derive from. Дополнительные сведения см. в разделе Модель содержимого WPF.For more information, see WPF Content Model.

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

DispatcherObjectDispatcherObject

DispatcherObject обеспечивает поддержку потоковой модели WPFWPF и позволяет связывать все объекты, созданные для WPFWPF приложений, с Dispatcher.DispatcherObject provides support for the WPFWPF threading model and enables all objects created for WPFWPF applications to be associated with a Dispatcher. Даже если вы не наследуете от UIElement, DependencyObjectили Visual, следует рассмотреть возможность наследования от DispatcherObject, чтобы обеспечить поддержку этой потоковой модели.Even if you do not derive from UIElement, DependencyObject, or Visual, you should consider deriving from DispatcherObject in order to get this threading model support. Дополнительные сведения см. в разделе Модель потоков.For more information, see Threading Model.

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

Visual реализует концепцию 2D-объекта, который обычно требует визуального представления в примерно прямоугольной области.Visual implements the concept of a 2D object that generally requires visual presentation in a roughly rectangular region. Фактическая визуализация Visual происходит в других классах (он не является автономным), но класс Visual предоставляет известный тип, используемый процессами отрисовки на различных уровнях.The actual rendering of a Visual happens in other classes (it is not self-contained), but the Visual class provides a known type that is used by rendering processes at various levels. Visual реализует проверку попадания, но не предоставляет события, которые сообщают о положительных проверках на попадание (они находятся в UIElement).Visual implements hit testing, but it does not expose events that report hit-testing positives (these are in UIElement). Дополнительные сведения см. в разделе Программирование визуального слоя.For more information, see Visual Layer Programming.

FreezableFreezable

Freezable имитирует неизменность в изменяемом объекте, предоставляя средства для создания копий объекта, если Неизменяемый объект является обязательным или требуется для повышения производительности.Freezable simulates immutability in a mutable object by providing the means to generate copies of the object when an immutable object is required or desired for performance reasons. Тип Freezable предоставляет общую базу для определенных графических элементов, таких как геометрические объекты и кисти, а также анимации.The Freezable type provides a common basis for certain graphics elements such as geometries and brushes, as well as animations. Особенно, Freezable не является Visual; Он может содержать свойства, которые становятся подсвойствами, когда Freezable применяется для заполнения значения свойства другого объекта, и эти подсвойства могут повлиять на отрисовку.Notably, a Freezable is not a Visual; it can hold properties that become subproperties when the Freezable is applied to fill a property value of another object, and those subproperties might affect rendering. Дополнительные сведения см. в разделе Общие сведения об объектах класса Freezable.For more information, see Freezable Objects Overview.

Animatable

Animatable — это Freezable производный класс, который специально добавляет слой управления анимацией и некоторые служебные элементы, чтобы в настоящее время анимированные свойства можно было отличать от неанимированных свойств.Animatable is a Freezable derived class that specifically adds the animation control layer and some utility members so that currently animated properties can be distinguished from nonanimated properties.

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

Control является предполагаемым базовым классом для типа объекта, для которого в зависимости от технологии используется термин «элемент управления» или «компонент».Control is the intended base class for the type of object that is variously termed a control or component, depending on the technology. Как правило, классы элементов управления WPFWPF — это классы, которые либо непосредственно представляют элемент управления пользовательского интерфейса, либо близко участвуют в его композиции.In general, WPFWPF control classes are classes that either directly represent a UI control or participate closely in control composition. Основные функциональные возможности, которые Control позволяют, — это шаблоны элементов управления.The primary functionality that Control enables is control templating.

См. такжеSee also