Необходимость в прокрутке возникает, если визуальное содержимое выходит за границы родительского элемента[3]. Панель прокрутки – это элемент управления содержимым ScrollViewer. Его свойства VerticalScrollBarVisibility и HorizontalScrollBarVisibility управляют видимостью полос прокрутки и принимают значение из перечисления ScrollBarVisibility:
1. Visible – полоса прокрутки видима, даже если в ней нет необходимости.
2. Auto – полоса прокрутки появляется только тогда, когда содержимое не помещается в визуальных границах панели прокрутки.
3. Hidden – полоса прокрутки не видна, но прокрутку можно выполнить в коде или используя клавиатуру.
4. Disabled – полоса прокрутки не видна, прокрутку выполнить нельзя.
Элемент ScrollViewer имеет методы для программной прокрутки. Вертикальная прокрутка выполняется при помощи методов LineUp(), LineDown(), PageUp(), PageDown(), ScrollToHome(), ScrollToEnd(), а горизонтальная прокрутка – при помощи LineLeft(), LineRight(), PageLeft(), PageRight(), ScrollToHorizontalOffset(), ScrollToLeftEnd(), ScrollToRightEnd().
Одной из особенностей ScrollViewer является возможность участия содержимого в процессе прокрутки. Такое содержимое должно быть представлено объектом, реализующим интерфейс IScrollInfo. Кроме этого, необходимо установить свойство ScrollViewer.CanContentScroll в значение true. Интерфейс IScrollInfo реализуют всего несколько элементов. Одним из них является контейнер StackPanel. Его реализация интерфейса IScrollInfo обеспечивает логическую прокрутку, которая осуществляет переход от элемента к элементу, а не от строки к строке.
|
|
<ScrollViewer CanContentScroll="True">
<StackPanel>
<Button Height="100" Content="1"/>
<Button Height="100" Content="2"/>
<Button Height="100" Content="3"/>
<Button Height="100" Content="4"/>
</StackPanel>
</ScrollViewer>
Декораторы обычно служат для того, чтобы графически разнообразить и украсить область вокруг объекта. Все декораторы являются наследниками класса System.Windows.Controls.Decorator. Большинство декораторов – это специальные классы, предназначенные для использования вместе с определёнными элементами управления. Есть два общих декоратора, применять которые имеет смысл при создании пользовательских интерфейсов: Border и Viewbox.
Декоратор Border принимает вложенное содержимое и добавляет к нему фон или рамку. Для управления Border можно использовать свойства размера и отступа, а также некоторые особые свойства:
Background – задаёт фон декоратора с помощью объекта Brush.
BorderBrush, BorderThickness – свойства задают цвет и ширину рамки. Чтобы показать рамку, нужно задать оба свойства. У рамки можно отдельно настроить ширину каждой из четырёх сторон.
CornerRadius – позволяет закруглить углы рамки. Можно отдельно настроить радиус закругления каждого угла.
<Border Margin="20" Padding="10" VerticalAlignment="Top"
|
|
Background="LightYellow" BorderBrush="SteelBlue"
BorderThickness="10,5,10,5" CornerRadius="5">
<StackPanel>
<Button Margin="5" Content="One" />
<Button Margin="5" Content="Two" />
<Button Margin="5" Content="Three" />
</StackPanel>
</Border>
Рис. 11. Декоратор Border.
Декоратор Viewbox масштабирует своё содержимое так, чтобы оно умещалось в этом декораторе. По умолчанию Viewbox выполняет масштабирование, которое сохраняет пропорции содержимого. Это поведение можно изменить при помощи свойства Stretch. Например, если свойству присвоить значение Fill, содержимое внутри Viewbox будет растянуто в обоих направлениях. Кроме этого, можно использовать свойство StretchDirection. Оно управляет масштабированием, когда содержимое достаточно мало (или слишком велико), чтобы уместиться в Viewbox.