При разработке интерфейса с большим количеством различных элементов управления часто, для экономии пространства, распределяют различные элементы на отдельных вкладках, группирую эти элементы, также, как и в случае с контейнерами, по смыслу. Для этого в WPF используется специальный элемент управления — TabControl
, который используется как контейнер вкладок, а каждая отдельная вкладка, представляется объектом типа TabItem
.
TabControl и работа с вкладками
Элемент управления TabControl
предоставляет нам следующие свойства для работы с вкладками элементов:
Свойство | Тип | Описание |
SelectedContent |
object |
Возвращает содержимое текущего выбранного элемента TabItem |
TabStripPlacement |
Dock |
Способ выравнивания заголовков вкладок относительно содержимого вкладки. Может принимать следующие значения: Bottom , Left , Right , Top |
Каждая вкладка представляет собой объект класса TabItem
, который, в свою очередь, является наследником класса HeaderedContentControl
, свойства которого мы рассматривали в этой части.
Рассмотрим применение TabControl
на следующем примере:
<TabControl> <TabItem Header="ASP.NET"> <TabItem.Content> <StackPanel> <CheckBox Content="Minimal API"></CheckBox> <CheckBox Content="Web API"></CheckBox> <CheckBox Content="MVC"></CheckBox> </StackPanel> </TabItem.Content> </TabItem> <TabItem Header="EF Core"> <TabItem.Content> <StackPanel> <CheckBox Content="MySQL"></CheckBox> <CheckBox Content="SQLite"></CheckBox> <CheckBox Content="Microsoft SQL"></CheckBox> </StackPanel> </TabItem.Content> </TabItem> <TabItem Header="Языки программирования"> <TabItem.Content> <StackPanel> <CheckBox Content="C#"></CheckBox> <CheckBox Content="F#"></CheckBox> <CheckBox Content="Iron Python"></CheckBox> </StackPanel> </TabItem.Content> </TabItem> </TabControl>
Обратите внимание на то, что каждый элемент TabItem
может содержать только один элемент содержимого, поэтому, чтобы разместить на каждой вкладке по три элемента CheckBox
, мы помещаем их внутрь контейнера StackPanel
.
По умолчанию, вкладки располагаются сверху, однако мы можем изменить их положение, используя свойство TabStripPlacement
<TabControl TabStripPlacement="Left"> .... </TabControl>
Теперь внешний вид элемента будет следующий:
Отслеживание активной вкладки TabControl
Элемент TabControl
наследуется от абстрактного класса Selector
, который позволяет выбирать элементы содержимого. Об этом классе, его свойствах и событиях мы подробно поговорим, когда будем рассматривать работу со списками. В этой же части я лишь продемонстрирую то, как можно отслеживать активную вкладку в TabControl
, используя обработчик события
<TextBlock x:Name="page" FontSize="16" FontWeight="Bold"></TextBlock> <TabControl SelectionChanged="TabControl_SelectionChanged"> ... </TabControl>
В TextBlock
мы будем выводить имя текущей вкладки. У элемента TabControl
определен обработчик события SelectionChanged
:
private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e) { page.Text = ((e.Source as TabControl).SelectedItem as TabItem).Header.ToString(); }
При смене активной вкладки мы будем видеть её имя в отдельном текстовом блоке, например:
Итого
Элемент TabControl
позволяет размещать элементу управления на отдельных вкладках и, при этом, в каждый момент времени может быть активна только одна вкладка. Для программного отслеживания активной вкладки мы можем использовать обработчик события SelectionChanged