Expander

99

Наиболее экзотичным из всех элементов управления содержимым с заголовками является Expander (расширитель). Он содержит область содержимого, которую пользователь может показать или скрыть, щелкнув на кнопочке со стрелкой. Такие элементы часто встречаются в оперативных подсказках и на веб-страницах, чтобы уместить большой объем содержимого, но не завалить пользователя информацией, которая ему не нужна.

Использовать объект Expander очень просто: нужно лишь упаковать в него все сворачиваемое содержимое. Обычно все расширители первоначально свернуты, но это можно изменить в разметке (или в коде), установив для них свойство IsExpanded.

Кроме того, можно указать направление развертывания элементов. В примере ниже использовано стандартное значение Down (вниз), но в свойстве ExpandDirection можно указать и направления Up (вверх), Left (влево) или Right (вправо). В свернутом расширителе стрелка всегда указывает направление развертывания содержимого.

<StackPanel>
        <Expander Margin="5" Header="Кнопка" Padding="5" BorderBrush="LightBlue" BorderThickness="2">
                    <Button Margin="5">
                        <Grid>
                            <Polygon Points="100,25 125,0 200,25 125,50" Fill="LightSteelBlue"></Polygon>
                            <Polygon Points="100,25 75,0 0,25 75,50" Fill="White"></Polygon>
                        </Grid>
                    </Button>
        </Expander>
        <Expander Margin="5" Padding="5" Header="Процессы Windows"  BorderBrush="LightBlue" BorderThickness="2">
                    <TextBlock TextWrapping="Wrap">
                        Понятие "процесса" существовало в операционных системах Windows ...
                    </TextBlock>
        </Expander>
</StackPanel>
Expander

Жизнь станет забавнее, если использовать различные значения ExpandDirection, т.к. влияние на остальную часть пользовательского интерфейса зависит от типа контейнера. Некоторые элементы, такие как WrapPanel, просто сдвигают остальные элементы в сторону. Другие, такие как Grid, допускают пропорциональное или автоматическое изменение размера.

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

Если нужно синхронизировать с расширителями другие элементы управления, можно обрабатывать события Expanded и Collapsed. Несмотря на названия ("развернуто" и "свернуто"), они возникают перед тем, как содержимое появится или исчезнет. Это дает возможность реализовать "ленивый" вариант загрузки. Например, если создание содержимого элемента Expander слишком трудоемко, можно подождать, пока оно появится, и затем выбрать его. Либо может понадобиться изменить содержимое перед его выводом на экран. В любом случае такие действия можно выполнить, реагируя на событие Expanded.

Если вам нравятся возможности класса Expander, но не нравится встроенный внешний вид, не огорчайтесь. Используя систему шаблонов WPF, можно полностью настроить стрелки развертывания и свертывания, чтобы они соответствовали стилю остальных элементов приложения.

Обычно при развертывании расширителя он принимает такой размер, чтобы вместить все его содержимое. Это может привести к проблемам, если размера окна не хватает для размещения всего полностью развернутого содержимого.

Такие проблемы можно устранить с помощью нескольких стратегий:

Пройди тесты
Лучший чат для C# программистов