Когда свойству Content
должно быть присвоено значение, которое невозможно выразить в виде простого массива символов, его нельзя присвоить с использованием атрибута в открывающем определении элемента управления. Взамен понадобится определить данные содержимого включает в качестве содержимого элемент
, который сам имеет уникальные данные (а именно —
и ):
Для установки сложного содержимого можно также применять , которое явно устанавливает свойство
Content
с помощью синтаксиса "свойство-элемент" (дополнительная информация о XAML будет дана позже в главе, так что пока не обращайте внимания на детали):
Имейте в виду, что не каждый элемент WPF является производным от класса ConentConrtol
, поэтому не все элементы поддерживают такую уникальную модель содержимого (хотя большинство поддерживает). Кроме того, некоторые элементы управления WPF вносят несколько усовершенствований в только что рассмотренную базовую модель содержимого. В главе 25 роль содержимого WPF раскрывается более подробно.
Роль класса System.Windows.Controls.Control
В отличие от ContentControl
все элементы управления WPF разделяют в качестве общего родительского класса базовый класс Control
. Он предоставляет многочисленные члены, которые необходимы для обеспечения основной функциональности пользовательского интерфейса. Например, в классе Control
определены свойства для установки размеров элемента управления, прозрачности, порядка обхода по нажатию клавиши <ТаЬ>
, отображаемого курсора, цвета фона и т.д. Более того, данный родительский класс предлагает поддержку Control
, сгруппированные по связанной функциональности.
Роль класса System.Windows.FrameworkElement
Базовый класс FrameworkElement
предоставляет несколько членов, которые применяются повсюду в инфраструктуре WPF, в том числе для поддержки раскадровки(в целях анимации)и привязки данных, а также возможности именования членов (через свойство Name
), получения любых ресурсов, определенных производным типом, и установки общих измерений производного типа. Основные члены класса FrameworkElement
кратко описаны в табл. 24.7.
Роль класса System.Windows.UIElement
Из всех типов в цепочке наследования класса Window
наибольший объем функциональности обеспечивает базовый класс UIElement
. Его основная задача — предоставить производному типу многочисленные события, чтобы он мог получать фокус и обрабатывать входные запросы. Например, в классе UIElement
предусмотрены многочисленные события для обслуживания операций перетаскивания, перемещения курсора мыши, клавиатурного ввода, ввода посредством пера и сенсорного ввода.
Модель событий WPF будет подробно описана в главе 25; тем не менее, многие основные события будут выглядеть вполне знакомо (MouseMove
, MouseDown
, MouseEnter
, MouseLeave
, KeyUp
и т.д.). В дополнение к десяткам событий родительский класс UIElement
предлагает свойства, предназначенные для управления фокусом, состоянием доступности, видимостью и логикой проверки попадания (табл. 24.8).
Роль класса System.Windows.Media.Visual
Класс Visual
предлагает основную поддержку визуализации в WPF, которая включает проверку попадания для графических данных, координатную трансформацию и вычисление ограничивающих прямоугольников. В действительности при рисовании данных на экране класс Visual
взаимодействует с подсистемой DirectX. Как будет показано в главе 26, инфраструктура WPF поддерживает три возможных способа визуализации графических данных, каждый из которых отличается в плане функциональности и производительности. Применение типа Visual
(и его потомков вроде DrawingVisual
) является наиболее легковесным путем визуализации графических данных, но также подразумевает написание вручную большого объема кода для учета всех требуемых служб. Более подробно об этом пойдет речь в главе 26.
Роль класса System.Windows.DependencyObject