Общие сведения об элементе управления ScrollViewer
Часто содержимое в пользовательском интерфейсе занимает больше места, чем вмещает область отображения на экране компьютера. ScrollViewer Элемент управления предоставляет удобный способ включить прокрутку содержимого в Windows Presentation Foundation (WPF) приложений. В данном разделе представлены ScrollViewer элемент и приводится несколько примеров использования.
Элемент управления ScrollViewer
Существуют два предварительно определенных элемента, обеспечивающих прокрутку в WPF приложений: ScrollBar и ScrollViewer. ScrollViewer Управления инкапсулирует горизонтальном и вертикальном ScrollBar элементов и контейнер содержимого (например, Panel элемент) для отображения других видимых элементов в прокручиваемой области. Необходимо выполнить сборку пользовательского объекта для использования ScrollBar элемента для прокрутки содержимого. Тем не менее, можно использовать ScrollViewer элемент сам по себе, так как это составной элемент управления, который инкапсулирует ScrollBar функциональные возможности.
ScrollViewer Элемент управления реагирует на команды мыши и клавиатуры и определяет множество методов для прокрутки содержимого на предопределенные значения приращения. Можно использовать ScrollChanged событий для обнаружения изменений в ScrollViewer состояние.
Объект ScrollViewer может иметь только один дочерний элемент, обычно Panel элемент, который может содержать Children коллекции элементов. Content Свойство определяет единственного потомка ScrollViewer.
Физическая и логическая прокрутка
Физическая прокрутка используется для прокрутки на предопределенное приращение, которое обычно является значением, объявленным в пикселях. Логическая прокрутка используется для прокрутки к следующему элементу в логическом дереве. Физическая прокрутка является поведением прокрутки по умолчанию для большинства Panel элементов. WPF поддерживает оба типа прокрутки.
Интерфейс IScrollInfo
IScrollInfo Интерфейс представляет основную область прокрутки в ScrollViewer или производном элементе управления. Интерфейс определяет свойства и методы, которые могут быть реализованы прокрутки Panel элементов, требующими прокрутки на логическую единицу, а не на физическое приращение. Приведение экземпляра класса IScrollInfo к производному Panel и затем использование его методов прокрутки обеспечивают удобный способ выполнить прокрутку до следующей логической единице в дочерней коллекции, а не приращение в пикселях. По умолчанию ScrollViewer элемент управления поддерживает прокрутку на физические единицы.
StackPanel и VirtualizingStackPanel реализуют IScrollInfo и имеют встроенную поддержку логической прокрутки. Для элементов управления разметкой, встроенную поддержку логической прокрутки, можно реализовать физическую прокрутку путем переноса узла Panel элемент в ScrollViewer и параметр CanContentScroll свойства false
.
В следующем примере кода показано, как привести экземпляр IScrollInfo для StackPanel и использование методов прокрутки содержимого (LineUp и LineDown) определенные в интерфейсе.
private void spLineUp(object sender, RoutedEventArgs e)
{
((IScrollInfo)sp1).LineUp();
}
private void spLineDown(object sender, RoutedEventArgs e)
{
((IScrollInfo)sp1).LineDown();
}
Определение и использование элемента ScrollViewer
В следующем примере создается ScrollViewer в окно, содержащее текст и прямоугольник. ScrollBar элементы отображаются, только когда они необходимы. При изменении размера окна, ScrollBar элементы появляются и исчезают в результате изменения значений из ComputedHorizontalScrollBarVisibility и ComputedVerticalScrollBarVisibility свойства.
// Create the application's main window
mainWindow = new Window ();
mainWindow.Title = "ScrollViewer Sample";
// Define a ScrollViewer
myScrollViewer = new ScrollViewer();
myScrollViewer.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto;
// Add Layout control
myStackPanel = new StackPanel();
myStackPanel.HorizontalAlignment = HorizontalAlignment.Left;
myStackPanel.VerticalAlignment = VerticalAlignment.Top;
TextBlock myTextBlock = new TextBlock();
myTextBlock.TextWrapping = TextWrapping.Wrap;
myTextBlock.Margin = new Thickness(0, 0, 0, 20);
myTextBlock.Text = "Scrolling is enabled when it is necessary. Resize the Window, making it larger and smaller.";
Rectangle myRectangle = new Rectangle();
myRectangle.Fill = Brushes.Red;
myRectangle.Width = 500;
myRectangle.Height = 500;
// Add child elements to the parent StackPanel
myStackPanel.Children.Add(myTextBlock);
myStackPanel.Children.Add(myRectangle);
// Add the StackPanel as the lone Child of the Border
myScrollViewer.Content = myStackPanel;
// Add the Border as the Content of the Parent Window Object
mainWindow.Content = myScrollViewer;
mainWindow.Show ();
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
WindowTitle="ScrollViewer Sample">
<ScrollViewer HorizontalScrollBarVisibility="Auto">
<StackPanel VerticalAlignment="Top" HorizontalAlignment="Left">
<TextBlock TextWrapping="Wrap" Margin="0,0,0,20">Scrolling is enabled when it is necessary.
Resize the window, making it larger and smaller.</TextBlock>
<Rectangle Fill="Red" Width="500" Height="500"></Rectangle>
</StackPanel>
</ScrollViewer>
</Page>
Стили элемента управления ScrollViewer
Как и все элементы в Windows Presentation Foundation, ScrollViewer можно применить различные стили для изменения поведения отрисовки по умолчанию элемента управления. Дополнительные сведения о стилях элементов управления см. в разделе Стилизация и использование шаблонов.
Разбивка документов на страницы
Альтернативой прокрутке содержимого документа является контейнер документа, поддерживающий разбиение на страницы. FlowDocument предназначен для документов, которые предназначены для размещения в элементе управления просмотра, такие как FlowDocumentPageViewer, который поддерживает разбивку содержимого на несколько страниц, устраняет необходимость в прокрутке. DocumentViewer предоставляет решение для просмотра FixedDocument содержимое, которое используется традиционная прокрутка для отображения содержимого за пределы области отображения.
Дополнительные сведения о форматах документа и параметрах представления см. в разделе Документы в WPF.