2009-12-03 3 views
6

У меня есть сетки внутри ScrollViewer внутри границы внутри StackPanel внутри окна.Как заставить ScrollViewer прокручивать область просмотра?

ScrollViewer ставит скроллбар справа, но это не прокручивать.

Как я могу заставить ScrollViewer сделать его содержимое прокручиваемым?

alt text http://www.deviantsart.com/upload/1bl34e1.png

<Window x:Class="TestScroll234343.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="150" Width="300"> 
    <StackPanel> 
    <!--<StackPanel Height="150"> doesn't work either--> 
     <Border> 
      <ScrollViewer>    
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="Auto"/> 
        </Grid.ColumnDefinitions> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="Auto"/> 
         <RowDefinition Height="Auto"/> 
         <RowDefinition Height="Auto"/> 
         <RowDefinition Height="Auto"/> 
         <RowDefinition Height="Auto"/> 
         <RowDefinition Height="Auto"/> 
         <RowDefinition Height="Auto"/> 
         <RowDefinition Height="Auto"/> 
         <RowDefinition Height="Auto"/> 
         <RowDefinition Height="Auto"/> 
        </Grid.RowDefinitions> 

        <TextBlock Grid.Row="0" Grid.Column="0" Text="Row0"/> 
        <TextBlock Grid.Row="1" Grid.Column="0" Text="Row1"/> 
        <TextBlock Grid.Row="2" Grid.Column="0" Text="Row2"/> 
        <TextBlock Grid.Row="3" Grid.Column="0" Text="Row3"/> 
        <TextBlock Grid.Row="4" Grid.Column="0" Text="Row4"/> 
        <TextBlock Grid.Row="5" Grid.Column="0" Text="Row5"/> 
        <TextBlock Grid.Row="6" Grid.Column="0" Text="Row6"/> 
        <TextBlock Grid.Row="7" Grid.Column="0" Text="Row7"/> 
        <TextBlock Grid.Row="8" Grid.Column="0" Text="Row8"/> 
        <TextBlock Grid.Row="9" Grid.Column="0" Text="Row9"/> 
       </Grid> 
      </ScrollViewer> 
     </Border> 

    </StackPanel> 
</Window> 

ответ

7

Вы должны установить высоту ScrollViewer.

Если вы этого не сделаете, Border спросить ScrollViewer какой высоты делать это хотят и ScrollViewer спрашивает Border какой высоты должно быть.

Другие варианты:

  • Изменить StackPanel для DockPanel (она не растет больше, чем Window)
  • Установите высоту StackPanel и привязать к нему в ScrollViewer

Код:

<StackPanel Height="140"> 
    <Border> 
     <ScrollViewer Height="{Binding RelativeSource={RelativeSource FindAncestor, 
        AncestorType={x:Type StackPanel}}, Path=Height}"> 
+0

Он работает, если я устанавливаю высоту ScrollViewer или Border, но не StackPanel или Window. Есть ли вообще сказать ScrollViewer, чтобы он стал высотой элемента управления, в котором он находится? –

+0

да, см. Отредактированный ответ –

+0

+1, но я также заметил одну проблему. В моем случае я окружаю ScrollView с помощью ListBox, теперь прокрутка мыши может прокручиваться по полосе прокрутки, а не внутри ListBox. Угадайте, что ListBox не относится к ScrollView. Как разрешить его прокручивать и контент? (В моем оригинальном дизайне я не указывал ScrollViewer) – HoKy22

Смежные вопросы