Cenni preliminari 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 controllo ScrollViewer consente di attivare lo scorrimento del contenuto nelle applicazioni Windows Presentation Foundation (WPF). In questo argomento vengono forniti cenni preliminari sul controllo ScrollViewer e diversi esempio di utilizzo.

Di seguito sono elencate le diverse sezioni di questo argomento:

  • Controllo ScrollViewer

  • Scorrimento fisico e logico

  • Definizione e utilizzo dell'elemento ScrollViewer

  • Applicazione di uno stile a un elemento ScrollViewer

  • Paginazione di documenti

  • Argomenti correlati

Controllo ScrollViewer

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

Il controllo ScrollViewer risponde a comandi del mouse e della tastiera, oltre a definire numerosi metodi con cui scorrere il contenuto in base a incrementi predeterminati. È possibile utilizzare l'evento ScrollChanged per rilevare una modifica nello stato di un controllo ScrollViewer.

Un controllo ScrollViewer può includere un unico elemento figlio, solitamente un elemento Panel che può contenere un insieme Children di elementi. La proprietà Content definisce l'unico elemento figlio del controllo ScrollViewer.

Scorrimento fisicoe logico

Lo scorrimento fisico viene utilizzato per scorrere il contenuto in base a un incremento fisico predeterminato, in genere un valore dichiarato in pixel. Lo spostamento logico viene utilizzato per scorrere fino all'elemento successivo nella struttura ad albero logica. Lo scorrimento fisico rappresenta il comportamento predefinito per la maggior parte degli elementi Panel. WPF supporta entrambi i tipi di scorrimento.

Interfaccia IScrollInfo

L'interfaccia IScrollInfo rappresenta l'area di scorrimento principale all'interno di un controllo ScrollViewer o di un controllo derivato. L'interfaccia definisce le proprietà e i metodi di scorrimento che possono essere implementati dagli elementi Panel che richiedono lo scorrimento in base a un'unità logica, anziché a un incremento fisico. Il cast di un'istanza di IScrollInfo in un controllo Panel derivato e quindi l'utilizzo dei relativi metodi di scorrimento consentono di scorrere fino all'unità logica successiva in un insieme figlio, anziché in base a un incremento in pixel. Per impostazione predefinita, il controllo ScrollViewer supporta lo scorrimento in base a unità fisiche.

I controlli StackPanel e VirtualizingStackPanel implementano IScrollInfo e supportano a livello nativo lo scorrimento logico. Per i controlli del layout che supportano a livello nativo lo scorrimento logico, è comunque possibile ottenere lo scorrimento fisico eseguendo il wrapping dell'elemento Panel host in un controllo ScrollViewer e impostando la proprietà CanContentScroll su false.

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

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
private void spLineUp(object sender, RoutedEventArgs e)
{
    ((IScrollInfo)sp1).LineUp();
}
private void spLineDown(object sender, RoutedEventArgs e)
{
    ((IScrollInfo)sp1).LineDown();
}

Definizione e utilizzo dell'elemento ScrollViewer

Nell'esempio seguente viene creato un oggetto ScrollViewer in una finestra che contiene testo e un rettangolo. Gli elementi ScrollBar vengono visualizzati solo quando sono necessari. Quando si ridimensiona la finestra, gli elementi ScrollBar vengono visualizzati e nascosti a causa dei valori aggiornati delle proprietà ComputedHorizontalScrollBarVisibility e ComputedVerticalScrollBarVisibility.


'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 Border
myScrollViewer.Content = myStackPanel
Me.Content = myScrollViewer

            // 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 ();


         // 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 Border
         myScrollViewer->Content = myStackPanel;

         // Add the Border as the Content of the Parent Window Object
         mainWindow->Content = myScrollViewer;
         mainWindow->Show();

<Page xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="https://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 per tutti i controlli di Windows Presentation Foundation, è possibile applicare uno stile all'elemento ScrollViewer in modo da modificarne il comportamento di rendering predefinito. Per ulteriori informazioni sull'applicazione di stili ai controlli, vedere Applicazione di stili e modelli.

Paginazione di documenti

Per il contenuto di un documento, in alternativa allo scorrimento è possibile scegliere un contenitore di documenti che supporta la paginazione. FlowDocument è per i documenti progettati per essere ospitati all'interno di un controllo di visualizzazione, ad esempio FlowDocumentPageViewer, che supporta l'impaginazione del contenuto tra più pagine, evitando di dover ricorrere allo scorrimento. DocumentViewer fornisce una soluzione per la visualizzazione del contenuto FixedDocument, che utilizza lo scorrimento tradizionale per visualizzare il contenuto all'esterno dell'area di autenticazione dell'area di visualizzazione.

Per ulteriori informazioni sui formati di documento e le opzioni di presentazione, vedere Documenti in WPF.

Vedere anche

Attività

How to: Create a ScrollViewer

Riferimenti

ScrollViewer

ScrollBar

IScrollInfo

Concetti

Documenti in WPF

Stili e modelli di ScrollBar

Ottimizzazione delle prestazioni: controlli