2009-12-03 10 views
6

Tengo una cuadrícula dentro de un ScrollViewer dentro de un borde dentro de un StackPanel dentro de una ventana.¿Cómo puedo hacer que ScrollViewer se desplace por el área de visualización?

El ScrollViewer pone una barra de desplazamiento a la derecha, pero es no desplazable.

¿Cómo puedo hacer que ScrollViewer haga que su contenido sea desplazable?

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> 

Respuesta

7

Se debe ajustar la altura de la ScrollViewer.

Si no lo hace, el BorderScrollViewer pedir a la altura de lo qué se quiere y el ScrollViewer pide al Border qué altura debe ser.

Otras opciones:

  • Cambiar el StackPanel para un DockPanel (no crece más que el Window)
  • Ajuste la altura de la StackPanel y se unen a ella en el ScrollViewer

Código:

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

Funciona si configuro la altura del ScrollViewer o el borde, pero no el StackPanel o la ventana. ¿Hay alguna forma de decirle al ScrollViewer que se convierta en la altura del control en el que se encuentra? –

+0

sí, consulte la respuesta editada –

+0

+1, pero también noté un problema. En mi caso, rodeo ScrollView con ListBox, ahora el desplazamiento del mouse solo puede desplazarse a lo largo de la barra de desplazamiento no dentro de ListBox. Guess ListBox no se relaciona con el ScrollView. ¿Cómo permitirle desplazarse también por el contenido? (En mi diseño original, no especifiqué el ScrollViewer) – HoKy22

Cuestiones relacionadas