ScrollViewer Genel Bakışı

Bir kullanıcı arabirimindeki içerikler genellikle bilgisayar ekranının görüntüleme alanından daha büyüktür. ScrollViewerdenetim, Windows Presentation Foundation (WPF) uygulamalarında içerik kaydırmayı etkinleştirmek için kullanışlı bir yol sağlar. Bu konu, ScrollViewer öğesini tanıtır ve birkaç kullanım örneği sağlar.

ScrollViewer denetimi

WPF uygulamalarında kaydırmayı etkinleştiren önceden tanımlanmış iki öğe vardır: ScrollBar ve ScrollViewer . ScrollViewerBu denetim, ScrollBarPanel kaydırılabilir bir alanda diğer görünür öğeleri göstermek için yatay ve dikey öğeleri ve bir içerik kapsayıcısını (bir öğe gibi) kapsüller. İçerik kaydırma için öğesini kullanmak üzere özel bir nesne derlemeniz gerekir ScrollBar . Ancak, ScrollViewer işlevselliği kapsülleyen bir bileşik denetim olduğundan, öğesini kendisi de kullanabilirsiniz ScrollBar .

ScrollViewerDenetim hem fare hem de klavye komutlarına yanıt verir ve içeriği önceden belirlenmiş artışlarla kaydırmak için çeşitli yöntemler tanımlar. ScrollChangedOlayı, bir durumdaki değişikliği algılamak için kullanabilirsiniz ScrollViewer .

Yalnızca bir alt öğesi olabilir ScrollViewer , genellikle bir öğe Panel koleksiyonunu barındırabileceğiniz bir öğedir Children . ContentÖzelliği, öğesinin tek alt öğesini tanımlar ScrollViewer .

Fiziksel ve mantıksal kaydırma

Fiziksel kaydırma, genellikle piksel olarak belirtilen bir değere göre önceden belirlenmiş fiziksel artışa göre içerik kaydırmak için kullanılır. Mantıksal kaydırma, mantıksal ağaçtaki bir sonraki öğeye kaydırmak için kullanılır. Fiziksel kaydırma, çoğu öğe için varsayılan kaydırma davranışıdır Panel . WPF her iki kaydırma türünü de destekler.

Icrollinınfo arabirimi

IScrollInfoArabirim, veya türetilmiş bir denetim içindeki ana kaydırma bölgesini temsil eder ScrollViewer . Arabirim, Panel fiziksel bir artış yerine mantıksal birim tarafından kaydırmayı gerektiren öğeler tarafından uygulanabilen kaydırma özelliklerini ve yöntemleri tanımlar. Öğesinin bir örneğini IScrollInfo türetilmiş öğesine atama Panel ve sonra kaydırma yöntemlerini kullanma, piksel artışı yerine bir alt koleksiyonda bir sonraki mantıksal birime kaydırmak için kullanışlı bir yol sağlar. Varsayılan olarak, ScrollViewer Denetim fiziksel birimlere göre kaydırmayı destekler.

StackPanel ve VirtualizingStackPanel her ikisi de IScrollInfo mantıksal kaydırmayı uygular ve yerel olarak destekler. Mantıksal kaydırmayı yerel olarak destekleyen düzen denetimlerinde, ana bilgisayar Panel öğesini bir içinde sarmalayarak ScrollViewer ve CanContentScroll özelliğini olarak ayarlayarak fiziksel kaydırmaya devam edebilirsiniz false .

Aşağıdaki kod örneği, bir örneğinin öğesine nasıl ekleneceğini IScrollInfoStackPanel ve LineUp arabirim tarafından tanımlanan içerik kaydırma yöntemlerini (ve) kullanmayı gösterir 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

ScrollViewer Öğesi tanımlama ve kullanma

Aşağıdaki örnek, bir ScrollViewer metin ve dikdörtgen içeren bir pencerede oluşturur. ScrollBar öğeler yalnızca gerekli olduklarında görünür. Pencereyi yeniden boyutlandırdığınızda, ScrollBar ve özelliklerinin güncelleştirilmiş değerleri nedeniyle öğeler görünür ve kaybolur ComputedHorizontalScrollBarVisibilityComputedVerticalScrollBarVisibility .


// 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>

ScrollViewer Stillendirme

Windows Presentation Foundation içindeki tüm denetimler gibi, ScrollViewer denetimin varsayılan işleme davranışını değiştirmek için stil oluşturulabilir. Denetim stili hakkında daha fazla bilgi için bkz. Stil oluşturma ve şablonoluşturma.

Belgeleri sayfalayarak

Belge içeriği için, kaydırmaya alternatif olarak, sayfalandırmayı destekleyen bir belge kapsayıcısı seçmeniz gerekir. FlowDocument , gibi bir görüntüleme denetimi içinde barındırılmak üzere tasarlanan, gibi FlowDocumentPageViewer birden çok sayfada içerik sayfalandırmayı destekleyen, kaydırma ihtiyacını engelleyen belgeler içindir. DocumentViewer içeriği görüntülemek için FixedDocument , görüntüleme alanının bölgesi dışındaki içeriği görüntülemek için geleneksel kaydırmayı kullanan bir çözüm sağlar.

Belge biçimleri ve sunum seçenekleri hakkında daha fazla bilgi için bkz. WPF Içindeki belgeler.

Ayrıca bkz.