Panoramica sull'elemento ScrollViewer

Il contenuto all'interno di un'interfaccia utente è spesso di dimensioni maggiori dell'area di visualizzazione dello schermo di un computer. Il ScrollViewer controllo consente di abilitare lo scorrimento del contenuto nelle applicazioni Windows Presentation Foundation (WPF). In questo argomento viene presentato l'elemento ScrollViewer e vengono forniti diversi esempi di utilizzo.

Controllo ScrollViewer

Esistono due elementi predefiniti che consentono lo scorrimento nelle applicazioni WPF: ScrollBar e ScrollViewer. Il ScrollViewer controllo incapsula elementi orizzontali e verticali ScrollBar e un contenitore di contenuto (ad esempio un Panel elemento) per visualizzare altri elementi visibili in un'area scorrevole. È necessario compilare un oggetto personalizzato per usare l'elemento per lo ScrollBar scorrimento del contenuto. Tuttavia, è possibile usare l'elemento ScrollViewer da solo perché è un controllo composito che incapsula ScrollBar la funzionalità.

Il ScrollViewer controllo risponde ai comandi del mouse e della tastiera e definisce numerosi metodi con cui scorrere il contenuto in base a incrementi predeterminati. È possibile usare l'evento ScrollChanged per rilevare una modifica in uno ScrollViewer stato.

Un ScrollViewer oggetto può avere un solo elemento figlio, in genere un Panel elemento che può ospitare una Children raccolta di elementi. La Content proprietà definisce l'unico elemento figlio dell'oggetto ScrollViewer.

Scorrimento fisico e logico

Si usa lo scorrimento fisico per scorrere il contenuto di un incremento fisico predeterminato, in genere un valore che viene dichiarato in pixel. Si usa lo scorrimento logico per passare all'elemento successivo nell'albero logico. Lo scorrimento fisico è il comportamento di scorrimento predefinito per la maggior parte degli Panel elementi. WPF supporta entrambi i tipi di scorrimento.

Interfaccia IScrollInfo

L'interfaccia IScrollInfo rappresenta l'area di scorrimento principale all'interno di un ScrollViewer controllo derivato o . L'interfaccia definisce le proprietà e i metodi di scorrimento che possono essere implementati da Panel elementi che richiedono lo scorrimento in base all'unità logica, anziché da un incremento fisico. Eseguire il cast di un'istanza di IScrollInfo in un oggetto derivato Panel e quindi usare i metodi di scorrimento fornisce un modo utile per scorrere fino all'unità logica successiva in una raccolta figlio, anziché in base all'incremento in pixel. Per impostazione predefinita, il controllo supporta lo ScrollViewer scorrimento in base alle unità fisiche.

StackPanele implementano IScrollInfo e VirtualizingStackPanel supportano in modo nativo lo scorrimento logico. Per i controlli di layout che supportano lo scorrimento logico in modo nativo, è comunque possibile ottenere lo scorrimento fisico eseguendo il wrapping dell'elemento host Panel in un ScrollViewer oggetto e impostando la CanContentScroll proprietà su false.

Nell'esempio di codice seguente viene illustrato come eseguire il cast di un'istanza di a StackPanel e usare i metodi di IScrollInfo scorrimento del contenuto (LineUp e LineDown) definiti dall'interfaccia .

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

Definizione e uso di un elemento ScrollViewer

Nell'esempio seguente viene creato un oggetto ScrollViewer in una finestra contenente testo e un rettangolo. ScrollBar gli elementi vengono visualizzati solo quando sono necessari. Quando si ridimensiona la finestra, gli ScrollBar elementi vengono visualizzati e scompaiono, a causa dei valori aggiornati delle ComputedHorizontalScrollBarVisibility proprietà e 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>

Applicazione di uno stile a un elemento ScrollViewer

Come tutti i controlli in Windows Presentation Foundation, è ScrollViewer possibile applicare uno stile per modificare il comportamento di rendering predefinito del controllo. Per altre informazioni sull'applicazione di stili di controllo, vedere Applicazione di stili e modelli.

Paginazione di documenti

Per il contenuto del documento, un'alternativa alla visualizzazione a scorrimento consiste nello scegliere un contenitore di documenti che supporta l'impaginazione. FlowDocument è per i documenti progettati per essere ospitati all'interno di un controllo di visualizzazione, ad esempio FlowDocumentPageViewer, che supporta la paginazione del contenuto in più pagine, impedendo la necessità di scorrimento. DocumentViewer offre una soluzione per la visualizzazione FixedDocument del contenuto, che usa lo scorrimento tradizionale per visualizzare il contenuto all'esterno dell'area di visualizzazione.

Per altre informazioni sui formati di documento e sulle opzioni di presentazione, vedere Documenti in WPF.

Vedi anche