[Привязка (Binding)](./t8_binding.md) | [Содержание](../readme.md#тема-8-оконные-приложения) | [Каркас приложения. Модель данных. Привязка данных. Табличный вывод.](./wpf_template.md) # Элементы управления ## Обзор элементов управления и их свойств Чтобы как-то взаимодействовать с пользователем, получать от пользователя ввод с клавиатуры или мыши и использовать введенные данные в программе, нам нужны элементы управления. WPF предлагает нам стандартный набор элементов управления Все элементы управления могут быть условно разделены на несколько подгрупп: * Элементы управления содержимым, например кнопки (Button), метки (Label) * Специальные контейнеры, которые содержат другие элементы, но в отличие от элементов **Grid** или **Canvas** не являются контейнерами компоновки - **ScrollViewer**, **GroupBox** * Декораторы, чьё предназначение создание определенного фона вокруг вложенных элементов, например, **Border** или **Viewbox**. * Элементы управления списками, например, **ListBox**, **ComboBox**. * Текстовые элементы управления, например, **TextBox**, **RichTextBox**. * Элементы, основанные на диапазонах значений, например, **ProgressBar**, **Slider**. * Элементы для работ с датами, например, **DatePicker** и **Calendar**. * Остальные элементы управления, которые не вошли в предыдущие подгруппы, например, **Image**. Рассмотрим некоторые из основных свойств, которые наследуются элементами управления. **Name** Наверное важнейшее свойство. По установленному имени впоследствии можно будет обращаться к элементу, как в коде, так и в xaml разметке. Например, в xaml-разметке у нас определена следующая кнопка: ```xml ``` Либо мы можем использовать сокращенное неявное определения свойства **Content**: ```xml ``` Возьмем другой пример. Определим кнопку с именем *button1*: ```xml ``` Теперь в качестве содержимого будет использоваться другая кнопка, для которой при визуализации будет вызываться метод *OnRender()*: ![](../img/08015.png) В отличие от контейнеров компоновки для элементов управления содержимым мы можем задать только один вложенный элемент. Если же нам надо вложить в элемент управления содержимым несколько элементов, то мы можем использовать те же контейнеры компоновки: ```xml ``` ## Позиционирование контента Выравнивание содержимого внутри элемента задается свойствами *HorizontalContentAlignment* (выравнивание по горизонтали) и *VerticalContentAlignment* (выравнивание по вертикали), аналогичны свойствам *VerticalAlignment/HorizontalAlignment*. Свойство *HorizontalContentAlignment* принимает значения **Left**, **Right**, **Center** (положение по центру), **Stretch** (растяжение по всей ширине). Например: ```xml ``` Свойство **Padding** задаётся в формате `Padding="отступ_слева отступ_сверху отступ_справа отступ_снизу"`. Если со всех четырех сторон предполагается один и тот же отступ, то, как и в случае с **Margin**, мы можем задать одно число: ```xml