Общие сведения о базовых элементах
Большое количество классов в Windows Presentation Foundation (WPF) являются производными от четырех классов, которые обычно называются в документации по SDK базовыми классами элементов. Эти классы являются UIElement, FrameworkElement, ContentElement, и FrameworkContentElement. DependencyObject Класс также имеет отношение, так как это общий базовый класс обоих UIElement и ContentElement
Интерфейсы 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, например если общее решение уже имеет свои собственные реализации композиции и макета UI .
Выбор элемента для наследования
Наиболее удобным способом создания другого класса, расширяющего возможности WPF, является наследование от одного из классов WPF. Тогда вы получаете максимально возможное количество наследуемых функций благодаря существующей иерархии классов. В этом разделе перечислены возможности, предоставляемые тремя наиболее важными классами элементов. Эти сведения помогут вам решить, какой класс использовать для наследования.
При реализации элемента управления, который в действительности является одним из наиболее распространенных причин для создания производного от WPF класса, может потребоваться являются производными от класса, который является практическим управления семейства базовый класс элемента управления, или на как минимум Control базового класса. Некоторые рекомендации и практические примеры см. в разделе Общие сведения о разработке элементов управления.
Если вы не создаете элемент управления, а хотите создать производный класс от класса, который находится выше по иерархии, в следующих разделах вы найдете рекомендации по определению характеристик для каждого базового класса элементов.
Если вы создаете класс, производный от DependencyObject, вы наследуете следующие функциональные возможности:
GetValue и SetValue поддержки и общая системная поддержка свойств.
Возможность использования свойств зависимостей и вложенных свойств, которые реализуются как свойства зависимостей.
Если вы создаете класс, производный от UIElement, вы наследуете следующие функциональные возможности, предоставляемые DependencyObject:
Базовая поддержка для анимируемых значений свойств. Более подробную информацию см. в разделе Общие сведения об эффектах анимации.
Базовая поддержка событий ввода и поддержка команд. Дополнительные сведения см. в разделе Общие сведения о вводе данных и Общие сведения о системе команд.
Виртуальные методы, которые можно переопределить для передачи данных в систему макета.
Если вы создаете класс, производный от FrameworkElement, вы наследуете следующие функциональные возможности, предоставляемые UIElement:
Поддержка стилей и раскадровок. Дополнительные сведения см. в разделе Style и Общие сведения о раскадровках.
Поддержка привязки данных. Более подробную информацию см. в разделе Общие сведения о связывании данных.
Поддержка ссылок на динамические ресурсы. Дополнительные сведения см. в разделе Ресурсы XAML.
Поддержка наследования значений свойств и других флагов в метаданных, которые помогают передавать сведения о состоянии свойств в службы платформы, такие как привязка данных, управление стилями и реализация структуры макета. Дополнительные сведения см. в разделе Метаданные свойств платформы.
Понятие логического дерева. Дополнительные сведения см. в разделе Деревья в WPF.
Поддержка практической реализации уровня платформы WPF система макета, включая OnPropertyChanged переопределения, которое может обнаружить изменения в свойствах, влияющих на макет.
Если вы создаете класс, производный от ContentElement, вы наследуете следующие функциональные возможности, предоставляемые DependencyObject:
Поддержка анимации. Более подробную информацию см. в разделе Общие сведения об эффектах анимации.
Базовая поддержка событий ввода и поддержка команд. Дополнительные сведения см. в разделе Общие сведения о вводе данных и Общие сведения о системе команд.
Если вы создаете класс, производный от FrameworkContentElement, вы получаете следующие функциональные возможности, предоставляемые ContentElement:
Поддержка стилей и раскадровок. Дополнительные сведения см. в разделе Style и Общие сведения об анимации.
Поддержка привязки данных. Более подробную информацию см. в разделе Общие сведения о связывании данных.
Поддержка ссылок на динамические ресурсы. Дополнительные сведения см. в разделе Ресурсы XAML.
Поддержка наследования значений свойств и других флагов в метаданных, которые помогают передавать сведения о состоянии свойств в службы платформы, такие как привязка данных, управление стилями и реализация структуры макета. Дополнительные сведения см. в разделе Метаданные свойств платформы.
Вы не наследуете доступ к изменениям системы макета (таких как ArrangeOverride). Реализации системы макета доступны только на FrameworkElement. Однако вы наследуете OnPropertyChanged переопределения, которое может обнаружить изменения в свойства, которые влияют на макет и о них любым узлам содержимого.
Модели содержимого описаны в документации для различных классов. Модель содержимого, принятая для класса, возможно, является тем фактором, который следует рассмотреть при выборе подходящего класса для наследования. Дополнительные сведения см. в разделе Модель содержимого WPF.
Другие базовые классы
DispatcherObject
DispatcherObject обеспечивает поддержку для WPF модели и включает все объекты, созданные для работы с потоками WPF приложений, которым будет связана Dispatcher. Даже если вы не являются производными от UIElement, DependencyObject, или Visual, рекомендуется наследование от DispatcherObject для получения поддержки потоковой модели. Дополнительные сведения см. в разделе Модель потоков.
Визуальный элемент
Visual реализует концепцию двумерного объекта, который обычно требует визуального представления в приблизительно прямоугольной области. Реальное отображение объекта Visual происходит в других классах (не автономный), но Visual класс предоставляет известный тип, который используется в процессах отображения на разных уровнях. Visual реализует проверку попадания курсора, но он не предоставляет события, сообщающие положительных результатах проверки (они находятся в UIElement). Дополнительные сведения см. в разделе Программирование визуального слоя.
Freezable
Freezable имитирует постоянство в изменяемом объекте, предоставляя средства для создания копий объекта, когда требуется постоянный объект или необходим для повышения производительности. Freezable Тип обеспечивает общую основу для определенных графических элементов, таких геометрических объектов и кисти, а также анимации. В частности Freezable не Visual; он может содержать свойства, которые становятся дочерними свойствами при Freezable применяется для заполнения значения свойства другого объекта, и эти дочерние свойства могут влиять на отрисовку. Дополнительные сведения см. в разделе Общие сведения об объектах класса Freezable.
Animatable является Freezable производного класса, который специально добавляет уровень управления анимацией и некоторые служебные члены таким образом, в настоящее время анимационные свойства можно отличить свойства от неанимированных.
Элемент управления
Control является предполагаемым базовым классом для типа объекта, который называется элемент управления или компонент, в зависимости от технологии. Как правило, классы элементов управления WPF — это классы, которые либо непосредственно представляют элемент управления пользовательского интерфейса, либо близко участвуют в его композиции. Основные функциональные возможности, Control включает является шаблон элемента управления.