Содержание
Для того, чтобы визуально сгруппировать несколько элементов управления, в WPF используются специальные элементы-контейнеры, представленные классами GroupBox
и Expander
. Контейнеры GroupBox
и Expander
имеют общего предка — класс HeaderedContentControl
, поэтому вначале имеет смысл рассмотреть свойства этого класса.
Контейнеры GroupBox и Expander
Класс HeaderedContentControl
Класс HeaderedContentControl
является общим предком для контейнеров элементов управления в WPF:
Про TabControl
будет рассказано в одной из следующих частей, так как этот объект используется для создания вкладок с использованием другого элемента управления — TabControl
.
HeaderedContentControl
предоставляет нам следующие свойства для работы действие которых мы рассмотрим на его «детях» — GroupBox
и Expander
:
Свойство | Тип | Описание |
HasHeader |
bool |
Получает значение, указывающее является ли данный заголовок null (свойство только для чтения) |
Header |
object |
Получение или установка данных, используемых в качестве заголовков элементов управления. |
HeaderStringFormat |
string |
Возвращает или задает составную строку, которая определяет, как форматировать свойство заголовка, если оно отображается как строка. |
Контейнер GroupBox
Контейнер GroupBox
представляет собой обычную рамку с заголовком внутри которой располагаются другие элементы управления WPF. Например, создадим следующую группу элементов:
<GroupBox Header=".NET" Width="300" Height="200"> <StackPanel> <CheckBox Content="ASP.NET Core"/> <CheckBox Content="Blazor"/> <CheckBox Content=".NET MAUI"/> <CheckBox Content="Entity Framework Core"/> </StackPanel> </GroupBox>
Запустим приложение и посмотрим на результат:
Так как свойство
Header
имеет тип object
, то мы можем располагать в заголовке любые элементы. Например, ниже показан GroupBox
с заголовком, состоящим из StackPanel внутри которого располагается картинка и текст:
<GroupBox Width="300" Height="200"> <GroupBox.Header> <StackPanel Orientation="Horizontal"> <Image Source="/asp_40px.png"/> <TextBlock Foreground="Black" FontWeight="Bold" FontSize="16" VerticalAlignment="Center">.NET</TextBlock> </StackPanel> </GroupBox.Header> <StackPanel> <CheckBox Content="ASP.NET Core"/> <CheckBox Content="Blazor"/> <CheckBox Content=".NET MAUI"/> <CheckBox Content="Entity Framework Core"/> </StackPanel> </GroupBox>
В приложении такой GroupBox
выглядит следующим образом:
Контейнер Expander
В отличие от GroupBox
, контейнер Expander
позволяет скрыть содержимое контейнера, оставив видимым только заголовок. Этот класс предоставляет нам следующие свойства:
Свойство | Тип | Описание |
ExpandDirection |
ExpandDirection |
Направление, в котором открывается окно содержимого Expander . Может принимать следующие значения:
|
IsExpanded |
bool |
Определяет является ли видимым окно содержимого элемента Expander |
Также, этот элемент управления предоставляет нам события:
Событие | Описание |
public event System.Windows.RoutedEventHandler Collapsed; |
Генерируется когда Expander сворачивается |
public event System.Windows.RoutedEventHandler Expanded; |
Генерируется, когда Expander разворачивается |
Рассмотрим использование Expander
на следующем примере:
<StackPanel> <Expander Header="ASP.NET - это:" Collapsed="Expander_Collapsed" Expanded="Expander_Expanded" IsExpanded="True"> <Expander.Content> <StackPanel> <CheckBox Content="ASP.NET Core"/> <CheckBox Content="Blazor"/> <CheckBox Content=".NET MAUI"/> <CheckBox Content="Entity Framework Core"/> </StackPanel> </Expander.Content> </Expander> <TextBlock x:Name="text">Expander открыт</TextBlock> </StackPanel>
При запуске приложения вы увидите следующее окно:
Для элемента Expander
мы определили обработчики событий:
private void Expander_Collapsed(object sender, RoutedEventArgs e) { text.Text = "Expander скрыт"; } private void Expander_Expanded(object sender, RoutedEventArgs e) { if (text != null) { text.Text = "Expander открыт"; } }
поэтому, если вы сворачиваете или разворачиваете Expander
, то надпись под ним изменяется:
Итого
Контейнеры GroupBox
и Expander
позволяют визуально сгруппировать ряд элементов управления под одним заголовком. При этом, Expander
также позволяет сворачивать своё содержимое, оставляя видимым только заголовок.