Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Элемент управления ScrollViewer создает прокручиваемую область, в которой содержимое можно прокручивать по горизонтали или по вертикали. Содержимое в пользовательском интерфейсе часто больше области отображения экрана компьютера, и ScrollViewer предоставляет удобный способ включения прокрутки содержимого в приложениях Windows Presentation Foundation (WPF).
Элемент управления ScrollViewer инкапсулирует горизонтальные и вертикальные элементы ScrollBar, а также контейнер содержимого (например, элемент Panel) для отображения других видимых элементов в прокручиваемой области. Элемент 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();
}
Private Sub spLineUp(ByVal sender As Object, ByVal args As RoutedEventArgs)
CType(sp1, IScrollInfo).LineUp()
End Sub
Private Sub spLineDown(ByVal sender As Object, ByVal args As RoutedEventArgs)
CType(sp1, IScrollInfo).LineDown()
End Sub
Example
В следующем примере создается ScrollViewer в окне, содержащем текст и прямоугольник. ScrollBar элементы отображаются только в том случае, если они необходимы. При изменении размера окна ScrollBar элементы появляются и исчезают из-за обновленных значений ComputedHorizontalScrollBarVisibility и ComputedVerticalScrollBarVisibility свойств.
// Create the application's main window
mainWindow = gcnew System::Windows::Window();
mainWindow->Title = "ScrollViewer Sample";
// Define a ScrollViewer
myScrollViewer = gcnew ScrollViewer();
myScrollViewer->HorizontalScrollBarVisibility = ScrollBarVisibility::Auto;
// Add Layout control
myStackPanel = gcnew StackPanel();
myStackPanel->HorizontalAlignment = HorizontalAlignment::Left;
myStackPanel->VerticalAlignment = VerticalAlignment::Top;
TextBlock^ myTextBlock = gcnew TextBlock();
myTextBlock->TextWrapping = TextWrapping::Wrap;
myTextBlock->Margin = System::Windows::Thickness(0, 0, 0, 20);
myTextBlock->Text = "Scrolling is enabled when it is necessary. Resize the Window, making it larger and smaller.";
Rectangle^ myRectangle = gcnew 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 ScrollViewer
myScrollViewer->Content = myStackPanel;
// Add the ScrollViewer as the Content of the parent Window object
mainWindow->Content = myScrollViewer;
mainWindow->Show();
// 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 ScrollViewer
myScrollViewer.Content = myStackPanel;
// Add the ScrollViewer as the Content of the parent Window object
mainWindow.Content = myScrollViewer;
mainWindow.Show ();
'Define a ScrollViewer.
Dim myScrollViewer As New ScrollViewer
myScrollViewer.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto
'Add Layout control.
Dim myStackPanel As New StackPanel
myStackPanel.HorizontalAlignment = System.Windows.HorizontalAlignment.Left
myStackPanel.VerticalAlignment = System.Windows.VerticalAlignment.Top
Dim myTextBlock As 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."
Dim myRectangle As 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 ScrollViewer
myScrollViewer.Content = myStackPanel
'Add the ScrollViewer as the Content of the parent Window object
Me.Content = myScrollViewer
<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>
Практические руководства
| Название | Description |
|---|---|
| Обработка события ScrollChanged | Узнайте, как обрабатывать событие ScrollChanged в элементе управления ScrollViewer. |
| Прокрутка содержимого с помощью интерфейса IScrollInfo | Узнайте, как прокручивать содержимое с помощью интерфейса IScrollInfo. |
| Использование методов прокрутки содержимого в ScrollViewer | Узнайте, как использовать методы прокрутки содержимого ScrollViewer. |
Стили и шаблоны
В этом разделе описываются стили и шаблоны элемента ScrollViewer управления. Вы можете изменить значение по умолчанию ControlTemplate , чтобы предоставить элементу управления уникальный внешний вид. Дополнительные сведения см. в статье "Что такое стили и шаблоны?", а также как создать шаблон для элемента управления.
Свойство Content
Свойство Content определяет единственный дочерний элемент ScrollViewerобъекта .
Комплектующие
В следующей ScrollViewer таблице перечислены именованные части элемента управления.
| Часть | Тип | Description |
|---|---|---|
| PART_HorizontalScrollBar | ScrollBar | Используется ScrollBar для горизонтальной прокрутки содержимого. |
| PART_ScrollContentPresenter | ScrollContentPresenter | Заполнитель содержимого в объекте ScrollViewer. |
| PART_VerticalScrollBar | ScrollBar | Используется ScrollBar для прокрутки содержимого по вертикали. |
Визуальные состояния
В следующей ScrollViewer таблице перечислены визуальные состояния элемента управления.
| Имя VisualState | Имя VisualStateGroup | Description |
|---|---|---|
| НедопустимыйФокус | СостоянияВалидации | Присоединенное свойство Validation.HasError, и элемент управления имеет true фокус. |
| НедопустимыйБезФокуса | СостоянияВалидации | Присоединенное Validation.HasError свойство имеет true значение, и элемент управления не имеет фокуса. |
| Действительный | СостоянияВалидации | Контрол использует класс Validation, а присоединённое свойство Validation.HasError — это false. |
Разбиение документов на страницы
Альтернативой скроллингу для содержимого документа может быть выбор контейнера для документов, поддерживающего разбиение на страницы. FlowDocument предназначен для документов, предназначенных для размещения в элементе управления просмотром, например FlowDocumentPageViewer, который поддерживает разбиение содержимого на страницы на нескольких страницах, предотвращая необходимость прокрутки. DocumentViewer предоставляет решение для просмотра FixedDocument содержимого, которое использует традиционное прокрутку для отображения содержимого за пределами области отображения.
Дополнительные сведения о форматах документов и параметрах презентации см. в разделе "Документы" в WPF.
См. также
.NET Desktop feedback