Элементы управления в WPF. Контейнеры GroupBox и Expander

Для того, чтобы визуально сгруппировать несколько элементов управления, в WPF используются специальные элементы-контейнеры, представленные классами GroupBox и Expander. Контейнеры GroupBox и Expander имеют общего предка — класс HeaderedContentControl, поэтому вначале имеет смысл рассмотреть свойства этого класса.

Контейнеры GroupBox и Expander

Класс HeaderedContentControl

Класс HeaderedContentControlявляется общим предком для контейнеров элементов управления в WPF:

Контейнеры GroupBox и Expander в WPF и C#

Про 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>

Запустим приложение и посмотрим на результат:

Контейнеры GroupBox и Expander в WPF и C#Так как свойство 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 выглядит следующим образом:

Контейнеры GroupBox и Expander в WPF и C#

Контейнер Expander

В отличие от GroupBox, контейнер Expander позволяет скрыть содержимое контейнера, оставив видимым только заголовок. Этот класс предоставляет нам следующие свойства:

Свойство Тип Описание
ExpandDirection ExpandDirection Направление, в котором открывается окно содержимого Expander. Может принимать следующие значения:

  • Down
  • Up
  • Left
  • Right
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>

При запуске приложения вы увидите следующее окно:

Контейнеры GroupBox и Expander в WPF и C#

Для элемента 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 в WPF и C#

Итого

Контейнеры GroupBox и Expander позволяют визуально сгруппировать ряд элементов управления под одним заголовком. При этом, Expander также позволяет сворачивать своё содержимое, оставляя видимым только заголовок.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии