Aracılığıyla paylaş


ScrollViewer'a Genel Bakış

Kullanıcı arabirimindeki içerik genellikle bilgisayar ekranının görüntüleme alanından daha büyüktür. ScrollViewer denetimi, Windows Presentation Foundation (WPF) uygulamalarında içerik kaydırmayı etkinleştirmek için kullanışlı bir yol sağlar. Bu konu başlığında ScrollViewer öğesi tanıtılmaktadır ve çeşitli kullanım örnekleri sağlanmaktadır.

ScrollViewer Denetimi

WPF uygulamalarında kaydırmayı etkinleştiren önceden tanımlanmış iki öğe vardır: ScrollBar ve ScrollViewer. ScrollViewer denetimi, kaydırılabilir bir alanda diğer görünür öğeleri görüntülemek için yatay ve dikey ScrollBar öğelerini ve bir içerik kapsayıcısını (Panel öğesi gibi) kapsüller. İçerik kaydırma için ScrollBar öğesini kullanmak için özel bir nesne oluşturmanız gerekir. Ancak, ScrollViewer işlevselliği kapsülleyen bileşik bir denetim olduğundan ScrollBar öğesini tek başına kullanabilirsiniz.

ScrollViewer denetimi hem fare hem de klavye komutlarına yanıt verir ve içeriği önceden belirlenmiş artışlarla kaydırmak için çok sayıda yöntem tanımlar. ScrollChanged durumundaki bir değişikliği algılamak için ScrollViewer olayını kullanabilirsiniz.

Bir ScrollViewer yalnızca bir alt öğeye sahip olabilir; genellikle bir Panel öğesi, Children koleksiyonunu barındırabilir. Content özelliği, ScrollViewer'in tek alt öğesini tanımlar.

Fiziksel ve Mantıksal Kaydırma karşılaştırması

Fiziksel kaydırma, içeriği önceden belirlenmiş bir fiziksel artışla (genellikle piksel cinsinden bildirilen bir değerle) kaydırmak için kullanılır. Mantıksal kaydırma, mantıksal ağaçta bir sonraki öğeye kaydırmak için kullanılır. Fiziksel kaydırma, çoğu Panel öğe için varsayılan kaydırma davranışıdır. WPF her iki kaydırma türünü de destekler.

IScrollInfo Arabirimi

IScrollInfo arabirimi, ScrollViewer veya türetilmiş denetim içindeki ana kaydırma bölgesini temsil eder. Arabirim, fiziksel bir artış yerine mantıksal birime göre kaydırma gerektiren Panel öğeler tarafından uygulanabilen kaydırma özelliklerini ve yöntemlerini tanımlar. IScrollInfo örneğini türetilmiş bir Panel'e dönüştürmek ve ardından onun kaydırma yöntemlerini kullanmak, bir alt koleksiyondaki bir sonraki mantıksal birime kaydırmak için pikselle kaydırmak yerine kullanışlı bir yol sağlar. Varsayılan olarak, ScrollViewer denetimi fiziksel birimlere göre kaydırmayı destekler.

StackPanel ve VirtualizingStackPanel hem IScrollInfo uygular hem de mantıksal kaydırmayı yerel olarak destekler. Mantıksal kaydırmayı yerel olarak destekleyen düzen denetimleri için, konak Panel öğesini bir ScrollViewer sarmalayıp CanContentScroll özelliğini falseolarak ayarlayarak fiziksel kaydırma gerçekleştirmeye devam edebilirsiniz.

Aşağıdaki kod örneğinde bir IScrollInfo örneğinin bir StackPanel nasıl atandığı ve arabirim tarafından tanımlanan içerik kaydırma yöntemlerinin (LineUp ve LineDown) nasıl kullanılacağı gösterilmektedir.

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 metin ve dikdörtgen içeren bir pencerede bir ScrollViewer oluşturur. ScrollBar öğeler yalnızca gerekli olduğunda görünür. Pencereyi yeniden boyutlandırdığınızda, ScrollBar ve ComputedHorizontalScrollBarVisibility özelliklerinin güncelleştirilmiş değerleri nedeniyle ComputedVerticalScrollBarVisibility öğeleri görünür ve kaybolur.


// 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 Biçimlendirme

Windows Presentation Foundation'daki tüm denetimler gibi ScrollViewer de denetimin varsayılan işleme davranışını değiştirmek için stillendirilebilir. Denetim stili hakkında ek bilgi için bkz. Stil ve Şablonlama.

Belgeleri Sayfalandırma

Belge içeriği için kaydırmanın alternatifi, sayfalandırmayı destekleyen bir belge kapsayıcısı seçmektir. FlowDocument, birden çok sayfada içerik sayfalandırmayı destekleyen ve kaydırma gereksinimini önleyen FlowDocumentPageViewergibi bir görüntüleme denetiminde barındırılacak şekilde tasarlanmış belgeler içindir. DocumentViewer, FixedDocument içeriği görüntülemek için bir çözüm sağlar. Bu çözüm, içeriği görüntüleme alanının dışında görüntülemek için geleneksel kaydırmayı kullanır.

Belge biçimleri ve sunu seçenekleri hakkında ek bilgi için bkz. WPF'de Belgeler.

Ayrıca bakınız